【问题标题】:How to initialize a UTF-16 in code?如何在代码中初始化 UTF-16?
【发布时间】:2017-05-25 17:53:31
【问题描述】:

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

【问题讨论】:

  • \U 符号我相信需要 8 位数字。试试'\U00020000'

标签: python string unicode character utf-16


【解决方案1】:

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

【讨论】:

  • 我的 OP 没有字面量...有人编辑过它... =)
  • @alvas 您仍然对 UTF-8、UTF-16 和 Unicode 之间的区别有些混淆。在您了解这些差异之前,您将继续遇到麻烦。 '\U00020000' 不是 UTF-8 UTF-16,它是单个 Unicode 字符。
  • 我想我理解它们,只是不是在 Python 中初始化它们的语法 =) stackoverflow.com/questions/2241348/…,对吧?
  • @alvas 如果您已经阅读并理解了问题和所有答案,那么您的状态比大多数人都好。现在的问题是更准确地使用这些术语。
【解决方案2】:

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

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

u"\U00020000"

this page:

Python源码u"\U00020000"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2011-08-18
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    相关资源
    最近更新 更多