В Python 3 предположим, что у меня есть
>>> thai_string = 'สีเ'
Использование encode
дает
>>> thai_string.encode('utf-8')
b'\xe0\xb8\xaa\xe0\xb8\xb5'
Мой вопрос: как я могу заставить encode()
возвращать последовательность bytes
, используя \u
вместо \x
? И как я могу decode
вернуть их к типу Python 3 str
?
Я попытался использовать встроенную функцию ascii
, которая дает
>>> ascii(thai_string)
"'\\u0e2a\\u0e35'"
Но это кажется не совсем правильным, так как я не могу раскодировать его обратно, чтобы получить thai_string
.
документация Python говорит мне, что
\xhh
экранирует символ с шестнадцатеричным значениемhh
, а\uxxxx
экранирует символ с 16-битным шестнадцатеричным значениемxxxx
В документации сказано, что \u
используется только в строковых литералах, но я не уверен, что это значит. Это намек на то, что мой вопрос имеет ошибочную предпосылку?
.decode('utf-8')
? В любом случае, строки в юникоде Python не являются? - person Zizouz212   schedule 29.08.2015thai_string
, ниascii(thai_string)
не имеют методаdecode
, аthai_string.encode('utf-8').decode('utf-8')
возвращает меня к тому, с чего я начал,thai_string
, что не является желаемым результатом. - person Michael Currie   schedule 29.08.2015\u
: docs.python.org/3/reference/lexical_analysis .html и docs.python.org/3. /library/codecs.html#encodings-and-unicode - person Ioannis Filippidis   schedule 08.04.2021ascii(sku).replace(r"\x", r"\u00")
и работает лучше - person Felipe Buccioni   schedule 28.07.2021