188 votes

Pourquoi nous avons besoin de sys.setdefaultencoding("utf-8") dans un script py?

J'ai vu quelques py, scripts qui utilisent ce à le haut du script. Dans ce cas, il faut utiliser?

import sys
reload(sys)
sys.setdefaultencoding("utf-8")

154voto

pyfunc Points 31088

Selon les documents: Ceci vous permet de basculer de la valeur par défaut ASCII à d'autres encodages UTF-8, ce qui le runtime de Python va utiliser chaque fois que cela a pour décoder un tampon de chaîne unicode.

Cette fonction est uniquement disponible à Python heure de démarrage, quand Python analyses de l'environnement. Il doit être appelé dans un système à l'échelle de module, sitecustomize.py Après ce module a été évalué, le setdefaultencoding() la fonction est supprimée à partir du module sys.

La seule façon de l'utiliser est avec un rechargement hack qui apporte de l'attribut.

Aussi, l'utilisation de sys.setdefaultencoding() a toujours été découragé, et il est devenu un no-op dans py3k. L'encodage est câblé à l'utf-8 et la modification des il génère une erreur.

Je suggère quelques conseils pour readup:

19voto

Sérgio Points 854
#!/usr/bin/env python
#-*- coding: utf-8 -*-
u = u'moçambique'
print u.encode("utf-8")
print u

chmod +x test.py
./test.py
moçambique
moçambique

./test.py > output.txt
Traceback (most recent call last):
  File "./test.py", line 5, in <module>
    print u
UnicodeEncodeError: 'ascii' codec can't encode character 
u'\xe7' in position 2: ordinal not in range(128)

sur shell fonctionne , l'envoi de sdtout pas , donc, c'est une solution de contournement, d'écrire sur la sortie standard stdout .

J'ai fait une autre démarche, qui n'est pas exécuté si sys.la sortie standard stdout.l'encodage n'est pas de définir, ou en d'autres termes , la nécessité d'exportation PYTHONIOENCODING=UTF-8 premier à écrire sur la sortie standard stdout.

import sys
if (sys.stdout.encoding is None):            
    print >> sys.stderr, "please set python env PYTHONIOENCODING=UTF-8, example: export PYTHONIOENCODING=UTF-8, when write to stdout." 
    exit(1)


donc, en utilisant le même exemple:

export PYTHONIOENCODING=UTF-8
./test.py > output.txt

va travailler

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X