Was ist unicode_literals verwendet?
Bekomme ich ein seltsames problem mit __future__.unicode_literals
in Python. Ohne Import unicode_literals
bekomme ich die richtige Ausgabe:
# encoding: utf-8
# from __future__ import unicode_literals
name = 'helló wörld from example'
print name
Aber wenn ich die unicode_literals
import:
# encoding: utf-8
from __future__ import unicode_literals
name = 'helló wörld from example'
print name
Bekam ich diese Fehlermeldung:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 4: ordinal not in range(128)
Tut unicode_literals
Kodieren jeder string als utf-8?
Was soll ich tun, überschreiben Sie diese Fehler?
- Der import hat nur einen Effekt auf Python 2; es macht Python-2 Verhalten sich wie Python 3, wenn es um string-Literale. Es macht den code cross-Python-version kompatibel.
- Das Problem ist, mit dem terminal, es ist nicht zur Anzeige von nicht-ascii-Zeichen.
- Da Sie über
print
als einer Anweisung müssen Sie mit Python 2 statt; ich habe entfernt diepython-3.x
tag, die mich warf. - Nein, es ist perfekt in der Lage, bereits codierte UTF-8-bytes. Es ist nicht der Kommunikation bei Python, dass es UTF-8 verwenden.
- Ja, hätte ich formuliert, dass besser.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihrem terminal oder Konsole scheitern zu lassen, Python weiß, es unterstützt UTF-8.
Ohne die
from __future__ import unicode_literals
Linie, erstellen Sie ein byte-string, der hält UTF-8-codierte bytes. Mit der Zeichenfolge, die Sie erstellen einunicode
string.print
hat behandeln diese zwei Werte unterschiedlich; eine byte-Zeichenfolge geschrieben wirdsys.stdout
unverändert. Einunicode
string kodiert Byte zuerst, und Python berätsys.stdout.encoding
für, die. Wenn Ihr system nicht richtig sagen, Python, welchen codec es unterstützt die Standard-ASCII.Ihrem system konnte nicht sagen, Python, welchen codec zu verwenden;
sys.stdout.encoding
auf ASCII eingestellt ist, und die Codierung derunicode
Wert zu drucken ist fehlgeschlagen.Können Sie dies überprüfen, indem Sie manuell die Codierung auf UTF-8 beim drucken:
und Sie können das Problem reproduzieren, erstellen von unicode-Literale ohne die
from __future__
import-Anweisung zu:wo
u'..'
ist ein unicode-literal zu.Ohne Einzelheiten, was in Ihrer Umgebung ist, ist es schwer zu sagen, was die Lösung ist; das hängt natürlich sehr stark auf das Betriebssystem und die Konsole oder terminal verwendet.