2009-12-22 6 views
2

Comment écrire "mąka" en Python sans exception?Signes diacritiques

J'ai essayé var= u"mąka" et var= unicode("mąka") etc ... Rien n'y fait

Je codage définition en première ligne dans mon document, et encore j'ai cette exception:

'utf8' codec can't decode byte 0xb1 in position 0: unexpected code byte

Répondre

1

Quelle exception obtenez-vous?

Vous pouvez essayer d'enregistrer votre fichier de code source au format UTF-8, et de mettre ce en haut du fichier:

# coding=utf-8 

Cela dit Python qui a sauvé de fichier en UTF-8.

+0

Je: # - * - codage: utf-8 - * - Cela fait-il une différence? Mais, quand je l'ai changé, rien ne s'est passé ... – Driego

+0

Cela doit être la première ou la deuxième ligne du fichier, par PEP 0263 (http://www.python.org/dev/peps/pep -0263 /).De plus, si vous recevez toujours une exception, veuillez spécifier quelle exception il est préférable d'essayer et d'aider. –

1

Ce code fonctionne pour moi, enregistrez le fichier au format UTF-8:

v = u"mąka" 
print repr(v) 

La sortie que je reçois est:

u'm\u0105ka' 

S'il vous plaît copier et coller l'erreur exacte que vous obtenez. Si vous obtenez cette erreur:

UnicodeEncodeError: 'charmap' codec can't encode character ... in position ...: character maps to <undefined> 

Ensuite, vous essayez de sortir le caractère quelque part qui ne prend pas en charge UTF-8 (par exemple est réglé sur autre chose que UTF-8 de codage de caractères de votre shell).

2

Le # - - codage: - - ligne doit spécifier l'encodage du fichier source est enregistré dans ce message d'erreur:

'utf8' codec can't decode byte 0xb1 in position 0: unexpected code byte 

indique que vous n'êtes pas enregistrez le fichier source en UTF. -8. Vous pouvez enregistrer votre fichier source dans tout encodage prenant en charge les caractères que vous utilisez dans le code source, assurez-vous seulement de savoir de quoi il s'agit et disposez d'une ligne de codage appropriée.

+0

vous avez probablement raison. Driego devrait essayer de remplacer utf-8 par le chardet 'sys.getdefaultencoding()' value – mykhal

4

Enregistrer les 2 lignes suivantes dans write_mako.py:

# -*- encoding: utf-8 -*- 
open(u"mąka.txt", 'w').write("mąka\n") 

Run:

$ python write_mako.py 

fichier mąka.txt qui contient le mot mąka doit être créé dans le répertoire courant.

Si cela ne vous pouvez alors pas utiliser chardet pour détecter le codage réel du fichier (voir chardet example usage):

import chardet 

print chardet.detect(open('write_mako.py', 'rb').read()) 

Dans mon cas, il imprime:

{'confidence': 0.75249999999999995, 'encoding': 'utf-8'} 
+0

sur un fichier SOURCE ??? –

+0

Des moments désespérés et tout ça. –

+0

@John: oui, le problème OP est très probablement que le codage du fichier source ne correspond pas à celui de la ligne '' - * - encoding: ''. – jfs

Questions connexes