Eu usei este:
u = unicode(text, 'utf-8')
Mas recebendo um erro com Python 3 (ou ... talvez eu apenas tenha esquecido de incluir algo):
NameError: global name 'unicode' is not defined
Obrigado.
Eu usei este:
u = unicode(text, 'utf-8')
Mas recebendo um erro com Python 3 (ou ... talvez eu apenas tenha esquecido de incluir algo):
NameError: global name 'unicode' is not defined
Obrigado.
Respostas:
Strings literais são unicode por padrão no Python3.
Supondo que text
seja um bytes
objeto, basta usartext.decode('utf-8')
unicode
de Python2 é equivalente a str
em Python3, então você também pode escrever:
str(text, 'utf-8')
se você preferir.
str
é unicode, ou seja, é "decodificado", então não faz sentido chamá decode
-lo
str(text, 'utf-8')
, o texto deve ser um binário de string. por exemplostr(b'this is a binary', 'utf-8')
O que há de novo no Python 3.0 diz:
Todo o texto é Unicode; no entanto, o Unicode codificado é representado como dados binários
Se você quiser garantir que está gerando utf-8, aqui está um exemplo desta página em Unicode em 3.0 :
b'\x80abc'.decode("utf-8", "strict")
Como solução alternativa, tenho usado isto:
# Fix Python 2.x.
try:
UNICODE_EXISTS = bool(type(unicode))
except NameError:
unicode = lambda s: str(s)
try: unicode = str; except: pass
.
unicode = str
já que não vai falhar em 2 ou 3
from six import u as unicode
que eu prefiro simplesmente porque é mais unicode = str
Foi assim que resolvi meu problema de converter chars como \ uFE0F, \ u000A, etc. E também emojis que codificavam com 16 bytes.
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❤️❤️ '
Em um programa Python 2 que usei por muitos anos, havia esta linha:
ocd[i].namn=unicode(a[:b], 'utf-8')
Isso não funcionou no Python 3.
No entanto, o programa acabou funcionando com:
ocd[i].namn=a[:b]
Não me lembro por que coloquei unicode lá em primeiro lugar, mas acho que foi porque o nome pode conter as letras suecas åäöÅÄÖ. Mas mesmo eles funcionam sem "unicode".
a maneira mais fácil em python 3.x
text = "hi , I'm text"
text.encode('utf-8')