如何在代码中初始化UTF-16?

时间:2017-01-11 03:57:17

标签: python string unicode character utf-16

使用Python3来减少处理Unicode时的痛苦,我可以打印UTF-8字符:

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

但是当尝试用UTF-16做同样的事情时,让我们说U+20000u'\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

字符串外面的大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

2 个答案:

答案 0 :(得分: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"တ"u""

UTF-8和UTF-16是将这些编码为字节的方法。技术上,UTF-8是"\xf0\xa0\x80\x80"(我可能写成u"".encode("utf-8"))。

答案 1 :(得分:2)

正如@Mark Ransom所述,Python的UTF16 \U表示法需要八个字符才能正常工作。

因此,要使用的Python代码是:

u"\U00020000"

列于this page

  

Python源代码u&#34; \ U00020000&#34;