2015-08-28 5 views
2

В Python 3, предположим, что у меня естьКак закодировать строку Python 3 с помощью u escape-кода?

In[1] thai_string = 'สีเ' 

Использование encode дает

In[2]: thai_string.encode('utf-8') 
Out[2]: b'\xe0\xb8\xaa\xe0\xb8\xb5' 

Мой вопрос: как я могу получить encode() вернуть bytes последовательность, используя \u вместо \x? И как я могу вернуть decode на Python 3 str?

Я попытался с помощью ascii встроенной команды, которая дает

In[3]: ascii(thai_string) 
Out[3]: "'\\u0e2a\\u0e35'" 

Но это, кажется, не совсем верно, так как я не могу расшифровать его обратно, чтобы получить thai_string.

Python documentation говорит мне, что

  • \xhh экранирует символ со значением шестигранной hh в то время как
  • \uxxxx экранирует символ с 16-битного шестнадцатеричного значением xxxx

В документации говорится, что \u используется только в строковых литералах, но я не уверен, что это значит. Это намек на то, что мой вопрос имеет ошибочное предположение?

+0

Как насчет '.decode ('utf-8')'? Не являются ли строки в юникоде Python в любом случае? – Zizouz212

+0

@ Zizouz212, ни 'thai_string', ни' ascii (thai_string) 'не имеют метода' decode', а 'thai_string.encode ('utf-8'). Decode ('utf-8')' возвращает меня туда, где я start, 'thai_string', который не является желаемым выходом. –

ответ

2

Вы можете использовать unicode_escape:

>>> thai_string.encode('unicode_escape') 
b'\\u0e2a\\u0e35\\u0e40' 

Обратите внимание, что encode() всегда возвращает байт строки (в байтах) и unicode_escape кодирование is intended to:

продуцируют строку, которая подходит в качестве Unicode литерал Python исходный код

+0

Отлично. Но почему эта строка имеет две косые черты перед «u», а «x» - только одна? –

Смежные вопросы