J'utilise python 2.6.5 Je veux écrire des caractères japonais dans un fichier. J'obtiens cette erreur et je ne sais pas comment changer l'encodage.
Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01)
[GCC 4.3.4 20090804 (release) 1] on cygwin
>>> s = u'\u5E73\u621015'
>>> with open("yop", "wb") as f:
... f.write( s + "\n" );
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1:
ordinal not in range(128)
>>> type( s )
<type 'unicode'>
vous allez devoir "encoder" la chaîne unicode.
s = u'\u5E73\u621015'
with open("yop", "wb") as f:
f.write(s.encode("UTF-8"))
essayez ceci pour un peu de convivialité sur unicode et python: http://farmdev.com/talks/unicode/
Comme alternative, vous pouvez utiliser le module codecs
:
import codecs
s = u'\u5E73\u621015'
with codecs.open("yop", "w", encoding="utf-8") as f:
f.write(s)
La fonction codecs.open () dans 2.6 est très similaire à la fonction intégrée open () dans python3.x (ce qui est logique puisque les chaînes Py3k sont toujours Unicode). Pour une vérification future de votre code au cas où il serait utilisé sous Py3k, vous pouvez effectuer les opérations suivantes.
import sys
if sys.version_info[0] < 3:
import codecs
_open_func_bak = open # Make a back up, just in case
open = codecs.open
with open('myfile', 'w', encoding='utf-8') as f:
f.write(u'\u5E73\u621015')
Maintenant, votre code devrait fonctionner de la même façon dans les versions 2.x et 3.3+.
L'insérer au début de mon script tend à résoudre les problèmes Unicode.
import sys
reload(sys)
sys.setdefaultencoding('utf8')