Ich habe das benutzt:
u = unicode(text, 'utf-8')
Aber es wird ein Fehler mit Python 3 angezeigt (oder ... vielleicht habe ich einfach vergessen, etwas einzuschließen):
NameError: global name 'unicode' is not defined
Danke dir.
Ich habe das benutzt:
u = unicode(text, 'utf-8')
Aber es wird ein Fehler mit Python 3 angezeigt (oder ... vielleicht habe ich einfach vergessen, etwas einzuschließen):
NameError: global name 'unicode' is not defined
Danke dir.
Antworten:
Literalzeichenfolgen sind in Python3 standardmäßig Unicode.
Angenommen, dies textist ein bytesObjekt, verwenden Sie einfachtext.decode('utf-8')
unicodevon Python2 entspricht strPython3, sodass Sie auch schreiben können:
str(text, 'utf-8')
wenn Sie es vorziehen.
strist a Unicode, dh. es wird „decodiert“ , so macht es keinen Sinn rufen decodeauf sie
str(text, 'utf-8')Text eine binäre Zeichenfolge sein. zBstr(b'this is a binary', 'utf-8')
Was in Python neu 3.0 sagt:
Der gesamte Text ist Unicode. codierter Unicode wird jedoch als Binärdaten dargestellt
Wenn Sie sicherstellen möchten, dass Sie utf-8 ausgeben, finden Sie hier ein Beispiel auf dieser Seite zu Unicode in 3.0 :
b'\x80abc'.decode("utf-8", "strict")
Um dieses Problem zu umgehen, habe ich Folgendes verwendet:
# Fix Python 2.x.
try:
UNICODE_EXISTS = bool(type(unicode))
except NameError:
unicode = lambda s: str(s)
try: unicode = str; except: pass.
unicode = strda es weder in 2 noch in 3 scheitern wird
from six import u as unicodewas ich einfach vorziehen würde, weil es unicode = str
Auf diese Weise habe ich mein Problem gelöst, Zeichen wie \ uFE0F, \ u000A usw. zu konvertieren. Und auch Emojis, die mit 16 Bytes codiert sind.
example = 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\\uD83D\\uDE0D\\uD83D\\uDE0D\\u2764\\uFE0F Present Moment Caf\\u00E8 in St.Augustine\\u2764\\uFE0F\\u2764\\uFE0F '
import codecs
new_str = codecs.unicode_escape_decode(example)[0]
print(new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\ud83d\ude0d\ud83d\ude0d❤️ Present Moment Cafè in St.Augustine❤️❤️ '
new_new_str = new_str.encode('utf-16', 'surrogatepass').decode('utf-16')
print(new_new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream😍😍❤️ Present Moment Cafè in St.Augustine❤️❤️ '
In einem Python 2-Programm, das ich viele Jahre lang verwendet habe, gab es diese Zeile:
ocd[i].namn=unicode(a[:b], 'utf-8')
Dies funktionierte in Python 3 nicht.
Es stellte sich jedoch heraus, dass das Programm funktioniert mit:
ocd[i].namn=a[:b]
Ich erinnere mich nicht, warum ich dort überhaupt Unicode gesetzt habe, aber ich denke, das lag daran, dass der Name schwedische Buchstaben åäöÅÄÖ enthalten kann. Aber auch sie arbeiten ohne "Unicode".
der einfachste Weg in Python 3.x.
text = "hi , I'm text"
text.encode('utf-8')