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 to bytes
przedmiot, po prostu użyjtext.decode('utf-8')
unicode
Python2 jest odpowiednikiem str
w Python3, więc możesz również napisać:
str(text, 'utf-8')
Jeśli wolisz.
str
to unicode, tj. to jest „dekodowane”, więc nie ma sensu, aby zadzwonić decode
na nim
str(text, 'utf-8')
, tekst musi być binarny. np.str(b'this is a binary', 'utf-8')
Co nowego w Pythonie 3.0 mówi:
Cały tekst jest w formacie Unicode; jednakże zakodowany Unicode jest reprezentowany jako dane binarne
Jeśli chcesz mieć pewność, że generujesz utf-8, oto przykład z tej strony na temat Unicode w wersji 3.0 :
b'\x80abc'.decode("utf-8", "strict")
Jako obejście używam tego:
# Fix Python 2.x.
try:
UNICODE_EXISTS = bool(type(unicode))
except NameError:
unicode = lambda s: str(s)
try: unicode = str; except: pass
.
unicode = str
ponieważ nie zawiedzie ani w 2, ani w 3
from six import u as unicode
który wolałbym po prostu dlatego, że jest bardziej unicode = 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.
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❤️❤️ '
W programie w Pythonie 2, z którego korzystałem przez wiele lat, była taka linia:
ocd[i].namn=unicode(a[:b], 'utf-8')
To nie zadziałało w Pythonie 3.
Jednak program okazał się współpracować z:
ocd[i].namn=a[:b]
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”.
najłatwiej w Pythonie 3.x
text = "hi , I'm text"
text.encode('utf-8')