2017-01-11 10 views
1

Использование Python3, чтобы свести к минимуму боль при работе с Unicode, я могу напечатать символ UTF-8, как например:Как инициализировать код UTF-16?

>>> print (u'\u1010') 
တ 

Но при попытке сделать то же самое с UTF-16, скажем U+20000, u'\u20000' является неправильный способ инициализации персонажа:

>>> print (u'\u20000') 
  0 
>>> print (list(u'\u20000')) 
['\u2000', '0'] 

Он читает вместо 2 символов UTF-8.

Я также попробовал большой U, т.е. u'\U20000', но он выдает ошибку побег:

>>> print (u'\U20000') 
    File "<stdin>", line 1 
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-6: truncated \UXXXXXXXX escape 

Big U вне строка не работает слишком:

>>> print (U'\u20000') 
 0 
>>> print (U'\U20000') 
    File "<stdin>", line 1 
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-6: truncated \UXXXXXXXX escape 
+1

'\ U' обозначение требует 8 цифр, я считаю. Попробуйте '' \ U00020000''. –

ответ

3

Это не UTF-8 и UTF-16 литералы, но только unicode литералов, и они означают то же самое:

>>> print(u'\u1010') 
တ 
>>> print(u'\U00001010') 
တ 
>>> print(u'\u1010' == u'\U00001010') 
True 

Вторая форма позволяет вам укажите код над U + FFFF.

Как сделать это самым простым способом: закодируйте исходный файл как UTF-8 (или UTF-16), а затем вы можете просто написать и u"".

UTF-8 и UTF-16 - это способы их кодирования для байтов. Чтобы быть техническим, в UTF-8, который будет "\xf0\xa0\x80\x80" (который я, вероятно, написал бы как u"".encode("utf-8")).

+0

У моего OP не было слова literal ... Кто-то отредактировал его ... =) – alvas

+2

@alvas у вас все еще есть путаница в различии между терминами UTF-8, UTF-16 и Unicode. Пока вы не поймете эти различия, у вас будут проблемы. '' \ U00020000'' не UTF-8 * или * UTF-16, это единственный символ Unicode. –

+0

Я думаю, что понимаю их, просто не синтаксис для их инициализации в Python =) http://stackoverflow.com/questions/2241348/what-is-unicode-utf-8-utf-16, правильно? – alvas

2

Как @Mark Ransom прокомментировал, для обозначения Python UTF16 \U требуется восемь символов для работы.

Таким образом, код Python использовать это:

u"\U00020000" 

, как указано на this page:

Python source code u"\U00020000"