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 text
ist ein bytes
Objekt, verwenden Sie einfachtext.decode('utf-8')
unicode
von Python2 entspricht str
Python3, sodass Sie auch schreiben können:
str(text, 'utf-8')
wenn Sie es vorziehen.
str
ist a Unicode, dh. es wird „decodiert“ , so macht es keinen Sinn rufen decode
auf 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 = str
da es weder in 2 noch in 3 scheitern wird
from six import u as unicode
was 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')