Ho usato questo:
u = unicode(text, 'utf-8')
Ma ottenere un errore con Python 3 (o ... forse ho solo dimenticato di includere qualcosa):
NameError: global name 'unicode' is not defined
Grazie.
Ho usato questo:
u = unicode(text, 'utf-8')
Ma ottenere un errore con Python 3 (o ... forse ho solo dimenticato di includere qualcosa):
NameError: global name 'unicode' is not defined
Grazie.
Risposte:
Le stringhe letterali sono unicode per impostazione predefinita in Python3.
Supponendo che text
sia un bytes
oggetto, usalo e bastatext.decode('utf-8')
unicode
di Python2 è equivalente a str
in Python3, quindi puoi anche scrivere:
str(text, 'utf-8')
se preferisci.
str
è unicode, cioè. è "decodificato", così non ha senso chiamare decode
su di esso
str(text, 'utf-8')
, il testo deve essere una stringa binaria. ad esempiostr(b'this is a binary', 'utf-8')
Cosa c'è di nuovo in Python 3.0 dice:
Tutto il testo è Unicode; tuttavia Unicode codificato è rappresentato come dati binari
Se vuoi assicurarti di emettere utf-8, ecco un esempio da questa pagina su unicode in 3.0 :
b'\x80abc'.decode("utf-8", "strict")
Come soluzione alternativa, ho utilizzato questo:
# Fix Python 2.x.
try:
UNICODE_EXISTS = bool(type(unicode))
except NameError:
unicode = lambda s: str(s)
try: unicode = str; except: pass
.
unicode = str
perché non fallirà in 2 o 3
from six import u as unicode
che preferirei semplicemente perché è più auto-documentante (poiché sei è un livello di compatibilità 2/3) rispetto aunicode = str
In questo modo ho risolto il mio problema di convertire caratteri come \ uFE0F, \ u000A, ecc. E anche emoji codificati con 16 byte.
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 un programma Python 2 che ho usato per molti anni c'era questa riga:
ocd[i].namn=unicode(a[:b], 'utf-8')
Questo non ha funzionato in Python 3.
Tuttavia, il programma si è rivelato funzionare con:
ocd[i].namn=a[:b]
Non ricordo perché ho messo unicode lì in primo luogo, ma penso che fosse perché il nome può contenere lettere svedesi åäöÅÄÖ. Ma anche loro funzionano senza "unicode".
il modo più semplice in python 3.x
text = "hi , I'm text"
text.encode('utf-8')