Die Python 2.x-Druckanweisung konvertiert implizit den Unicode-Typ in den str-Typ und gibt dann die Standardausgabe aus.
Die Codierung für die Konvertierung in Unicode
-> str
wird durch locale.getpreferredencoding ()
bestimmt.
↓ Wenn ich versuche, Python vom Terminal auf dem Mac auszuführen.
>>> import locale
>>> locale.getpreferredencoding()
'UTF-8'
>>> print u'ah ah'
ah ah
↓ Wenn ich versuche, Python über die Eingabeaufforderung von Windows 7 auszuführen.
>>> import locale
>>> locale.getpreferredencoding()
'cp932'
>>> print u'ah ah'
ah ah
↓ Wenn ich versuche, Python über die PyDev-Konsole von Eclipse auszuführen.
>>> import locale
>>> locale.getpreferredencoding()
'US-ASCII'
>>> print u'ah ah'
Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
Da es sich in einer speziellen Umgebung um ASCII handelt, führt "u'ah" zu einem "UnicodeEncodeError" -Fehler.
Wenn Sie es wagen, die Codierung anzugeben, können Sie dies mit der folgenden Methode tun.
>>> import sys, codecs
>>> sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
>>> print u'ah ah'
ah ah
Es ist sehr wahrscheinlich, dass Sie den Fehler verstecken ...
_ENC_LOCALE = locale.getpreferredencoding()
sys.stdout = codecs.getwriter(_ENC_LOCALE)(sys.stdout, errors='replace')
sys.stderr = codecs.getwriter(_ENC_LOCALE)(sys.stderr, errors='replace')
Recommended Posts