Python - Codant pour la chaîne suédoise de Lettres
Je vais avoir quelques problèmes avec Python raw_input de commande (Python2.6),
Pour une raison quelconque, le raw_input ne pas obtenir de la chaîne convertie que swedify() produit et cela me donne une erreur de codage qui je suis au courant, c'est pourquoi j'ai fait swedify() pour commencer.
Voici ce que j'essaie de faire:
elif cmd in ('help', 'hjälp', 'info'):
buffert += 'Just nu är programmet relativt begränsat,\nDe funktioner du har att använda är:\n'
buffert += ' * historik :: skriver ut all din historik\n'
buffert += ' * ändra <något> :: ändrar något i databasen, följande finns att ändra:\n'
print swedify(buffert)
Cela fonctionne bien, il génère le suédois personnages, comme je veux à la console.
Mais quand j'essaie d' (dans le même code, et avec le même \x?? des valeurs, de l'impression de cette pièce:
core['goalDistance'] = raw_input(swedify('Hur långt i kilometer är ditt mål: '))
core['goalTime'] = raw_input(swedify('Vad är ditt mål i minuter att springa ' + core['goalDistance'] + 'km på: '))
Puis-je obtenir ceci:
C:\Users\Anon>python löp.py
Traceback (most recent call last):
File "l÷p.py", line 92, in <module>
core['goalDistance'] = raw_input(swedify('Hur långt i kilometer är ditt mål: '))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe5' in position 5: ordinal not in range(128)
Maintenant, j'ai googlé autour de, trouvé quelques "solutions", mais aucun d'eux de travailler, un peu tristes que j'ai créer un script batch qui exécute rssa ??? dans le début, mais ce n'est pas une solution propre de l'OMI.
Ici est swedify:
def swedify(inp):
try:
return inp.decode('utf-8')
except:
return '(!Dec:) ' + str(inp)
Toutes les solutions sur la façon d'obtenir raw_input de lire ma valeur de retour de swedify()?
j'ai essayé de codages d'importation getencoder, getdecoder et d'autres, mais rien pour le mieux.
swedify
et il suffit d'appeler raw_input
sur le suédois invite.qui version de python que vous utilisez? aussi, voulez-vous dire lorsque vous faites comme ceci: raw_input('Hur långt je kilomètre är ditt mål: ') parce que cela fonctionne pour moi mais puis-je obtenir la malformation de caractères dans la console en fonction de ce que la machine que je suis en cours d'exécution de mon code, et j'essaie de trouver un moyen universel de sortie å ä ö dans une console (avec différents systèmes d'exploitation, les langues et les localisations).
J'ai testé en supprimant le swedify appels et de ses œuvres pour le raw_input. Note sur ma machine j'ai dû ajouter ceci au début pour obtenir python analyse le script correctement:
# coding=utf-8
est peut-être ça peut aider les autres.Python 2.7.1. Mais c'est sur un Mac et je n'ai pas de page de codes questions que mon terminal est mis en UTF-8. Voir Lynch commentaire et essayer de le coding=utf-8 de la déclaration.
Je ne pense pas qu'il y est un tous pour obtenir de consoles pour afficher correctement parce que les consoles sont des applications natives. J'ai peut-être tort. Dans un navigateur web, en utilisant le HTML, vous pouvez montrer le caractère
å
sur tous les navigateurs, å
et cela fonctionne même si les utilisateurs finaux tromper leur navigateur en utilisant un encodage différent de celui envoyé par le serveur. Mais c'est un hack similaire à rssa que vous avez justement à éviter.OriginalL'auteur Torxed | 2011-09-06
Vous devez vous connecter pour publier un commentaire.
De mentionner le fait que vous avez reçu une erreur de codage qui vous ont poussé à écrire
swedify
en premier lieu, et vous avez trouvé des solutions autour dechcp
qui est une commande de Windows.Sur les systèmes *nix, avec l'encodage UTF-8 bornes,
swedify
n'est pas nécessaire:FWIW, quand je ne utilisation
swedify
, j'obtiens le même message d'erreur que vous faites:Votre
swedify
fonction renvoie un objet unicode. Le haut-raw_input
est tout simplement pas heureux avec unicode objets.Vous pourriez veux essayer ce en Python 3. Voir ce Python bug.
Également d'intérêt: Comment lire Unicode d'entrée et de comparer des chaînes Unicode Python?.
Mise à JOUR Selon ce blog il y a un moyen de mettre le système de codage par défaut. Cela peut être vaut la peine d'essayer.
Vous devriez toujours être en mesure d'obtenir des choses à travailler, parce que Windows 7 support UTF-8 pour son application console. Rappelez-vous que Python
raw_input
utilise l'encodage desys.stdin
donc, si vous pouvez vous la force que l'encodage UTF-8, et faire de même poursys.stdout
, ça va fonctionner? Désolé je n'ai pas de Windows 7 boîte à tester sur.Qui va travailler, je me souviens avoir vu une solution où ils avaient l'habitude de décoder(coder(u'...')) avec "remplacer" une certaine façon, mais je ne le trouve pas, mais je sais que cela a résolu beaucoup de problèmes. Mais le fait de forcer l'entrée standard stdin travaillera oui donc je vais marquer le message comme une solution, Windows est un travail autour de n'importe quoi 🙂 Cheers Ray!
la console Windows n' pas support de l'UTF-8. Il y a une page de code qui ressemble à l'appui de l'UTF-8, mais il est cassé au-delà de la croyance et provoque toutes sortes de problèmes, notamment autour de la lecture multi-octets d'entrée.
Bon à savoir. Mais il est difficile de croire que l'un des plus populaires dans le monde des systèmes d'exploitation choisi d'avoir un native terminal (console) de l'application qui ne traite pas avec ce qui est sans doute le plus populaire du monde de l'encodage Unicode. Donc, la société derrière l'O. S. est très bien de laisser simplement "de la console de support" pour les bénévoles dans la communauté open source pour créer un support sur la Console API? (Si oui, cela me frappe comme un exemple de trurth être plus étrange que la fiction 🙂 )
OriginalL'auteur Ray Toal
Pour moi il a bien fonctionné avec:
Par
OriginalL'auteur Per Persson
Sur Windows, la console est natif de l'Unicode est cassé. Même l'apparente UTF-8 pages de code, n'est-ce pas une bonne correction.
À lire et à écrire avec la console Windows, vous devez utiliser https://github.com/Drekin/win-unicode-console, qui travaille directement avec le sous-jacent de la console API, de sorte que les caractères multi-octets sont lus et écrits correctement.
OriginalL'auteur Alastair McCormack
Invite de commande Windows utilise la page de Code 850 lors de l'utilisation de suédois de paramètres régionaux (https://en.wikipedia.org/wiki/Code_page_850).
C'est probablement utilisé en raison de la compatibilité avec les anciens programmes MS-Dos.
Vous pouvez définir l'invite de commandes Windows pour utiliser l'encodage UTF-8 en entrant:
chcp 65001
(Les caractères Unicode dans la ligne de commande de Windows - comment?)OriginalL'auteur Tim Gremalm
Essayer cette magie commentaire tout en haut de votre script:
Voici quelques informations à ce sujet:
http://www.python.org/dev/peps/pep-0263/
OriginalL'auteur Fabian
Solution à beaucoup de problèmes:
Edit: C:\Python??\Lib\Site.py
Remplacer "del sys.setdefaultencoding" avec "pass"
Ensuite,
Mettez-le en haut de votre code:
Le saint graal de la fixation du suédois/non-UTF8 compatible caractères.
C'est le saint graal de bodges
OriginalL'auteur Torxed