Я использовал это:
u = unicode(text, 'utf-8')
Но возникает ошибка с Python 3 (или ... может быть, я просто забыл что-то включить):
NameError: global name 'unicode' is not defined
Спасибо.
Я использовал это:
u = unicode(text, 'utf-8')
Но возникает ошибка с Python 3 (или ... может быть, я просто забыл что-то включить):
NameError: global name 'unicode' is not defined
Спасибо.
Ответы:
Литеральные строки в Python3 по умолчанию являются юникодом.
Предполагая, что text
это bytes
объект, просто используйтеtext.decode('utf-8')
unicode
Python2 эквивалентен str
Python3, поэтому вы также можете написать:
str(text, 'utf-8')
Если вы предпочитаете.
str
- это юникод, т.е. он «расшифрован», поэтому нет смысла называть decode
его
str(text, 'utf-8')
, текст должен быть двоичной строкой. egstr(b'this is a binary', 'utf-8')
Что нового в Python 3.0 говорит:
Весь текст в Юникоде; однако закодированный Unicode представлен как двоичные данные
Если вы хотите убедиться, что вы выводите utf-8, вот пример с этой страницы в Unicode в версии 3.0 :
b'\x80abc'.decode("utf-8", "strict")
В качестве обходного пути я использовал это:
# Fix Python 2.x.
try:
UNICODE_EXISTS = bool(type(unicode))
except NameError:
unicode = lambda s: str(s)
try: unicode = str; except: pass
.
unicode = str
потому что ни 2, ни 3 не подведут
from six import u as unicode
что я бы предпочел просто потому, что он более самодокументированный (поскольку шесть - это уровень совместимости 2/3), чемunicode = str
Вот как я решил свою проблему с преобразованием символов типа \ uFE0F, \ u000A и т. Д. А также смайликов, закодированных с помощью 16 байтов.
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❤️❤️ '
В программе Python 2, которую я использовал много лет, была такая строка:
ocd[i].namn=unicode(a[:b], 'utf-8')
Это не работало в Python 3.
Однако оказалось, что программа работает с:
ocd[i].namn=a[:b]
Я не помню, почему я поставил здесь юникод в первую очередь, но я думаю, что это произошло потому, что имя может содержать шведские буквы åäöÅÄÖ. Но даже они работают без "юникода".
самый простой способ в python 3.x
text = "hi , I'm text"
text.encode('utf-8')