Відповіді:
Літеральні рядки за замовчуванням є унікодом у Python3.
Припускаючи, що textце bytesоб’єкт, просто використовуйтеtext.decode('utf-8')
unicodePython2 еквівалентний strPython3, тому ви також можете написати:
str(text, 'utf-8')
якщо ви віддаєте перевагу.
strє unicode, тобто. це "розшифровано", тому немає сенсу дзвонити decodeна нього
str(text, 'utf-8'), текст повинен бути двійковим рядком. наприкладstr(b'this is a binary', 'utf-8')
Що нового в Python 3.0 говорить:
Весь текст Unicode; однак кодований 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')