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

How to initialize a UTF-16 in code?

使用 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

正如 @Mark Ransom 评论的那样,Python 的 UTF16 \U 符号需要八个字符才能工作。

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

u"\U00020000"

this page 所列:

Python source code u"\U00020000"

这些不是 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"))。