Użyłem tego:
u = unicode(text, 'utf-8')
Ale pojawia się błąd w Pythonie 3 (lub ... może po prostu zapomniałem o czymś dołączyć):
NameError: global name 'unicode' is not defined
Dziękuję Ci.
Użyłem tego:
u = unicode(text, 'utf-8')
Ale pojawia się błąd w Pythonie 3 (lub ... może po prostu zapomniałem o czymś dołączyć):
NameError: global name 'unicode' is not defined
Dziękuję Ci.
Odpowiedzi:
W Pythonie3 łańcuchy literalne są domyślnie unicode.
Zakładając, że
text
jest tobytes
przedmiot, po prostu użyjtext.decode('utf-8')
unicode
Python2 jest odpowiednikiemstr
w Python3, więc możesz również napisać:Jeśli wolisz.
źródło
str
to unicode, tj. to jest „dekodowane”, więc nie ma sensu, aby zadzwonićdecode
na nimstr(text, 'utf-8')
, tekst musi być binarny. np.str(b'this is a binary', 'utf-8')
Co nowego w Pythonie 3.0 mówi:
Jeśli chcesz mieć pewność, że generujesz utf-8, oto przykład z tej strony na temat Unicode w wersji 3.0 :
źródło
Jako obejście używam tego:
źródło
try: unicode = str; except: pass
.unicode = str
ponieważ nie zawiedzie ani w 2, ani w 3from six import u as unicode
który wolałbym po prostu dlatego, że jest bardziejunicode = str
W ten sposób rozwiązałem swój problem z konwersją znaków takich jak \ uFE0F, \ u000A itp. A także emoji, które zakodowały 16 bajtów.
źródło
W programie w Pythonie 2, z którego korzystałem przez wiele lat, była taka linia:
To nie zadziałało w Pythonie 3.
Jednak program okazał się współpracować z:
Nie pamiętam, dlaczego umieściłem tam unicode w pierwszej kolejności, ale myślę, że to dlatego, że nazwa może zawierać szwedzkie litery åäöÅĘÖ. Ale nawet one działają bez „unicode”.
źródło
najłatwiej w Pythonie 3.x
źródło