Python 2.7:unicode 表示的名称

Python 2.7: Names of unicode representations

unicode 的这些不同类型的 ascii 表示形式的名称是什么?

他们所属的集合是否有比 "representation" 更具体的术语?在这些上下文中,我将如何描述非 ascii 表示 ()?

因为我不知道如何称呼它们,所以很难搜索如何使用它们。

谢谢!

正如 Tom Blodget 已经警告过您的那样,这是一个有点 python 具体的答案。


开头的\表明它是一个转义序列。

\x 表示接下来的两个字符将被解释为十六进制数字。

\U 表示接下来的八个字符将被解释为 32 位十六进制值。

您可以在此处阅读更多相关信息:

https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals

完整回答您的问题:

  • \xF0\x9F\x98\xA2 只是四个 ASCII 字符,您有它们的十六进制值
  • \U0001f622 是用 32 位十六进制值
  • 编码的 UNICODE 代码点
  • 是字形或简单的特殊字符。

为Python3

首先似乎对十六进制转义存在误解:

print("\xF0\x9F\x98\xA2" == "\u00F0\u009F\u0098\u00A2")
print("\xF0\x9F\x98\xA2" == "\U000000F0\U0000009F\U00000098\U000000A2")
print("\xF0\x9F\x98\xA2" == "\U000000F0\U0000009F\U00000098\U000000A2")
print("\xF0\x9F\x98\xA2" == "\N{LATIN SMALL LETTER ETH}\N{APPLICATION PROGRAM COMMAND}\N{START OF STRING}\N{CENT SIGN}")

为了完整性(我记得在机器代码中有效地使用了八进制,其中一些指令具有 3 位对齐参数,但我看不到实际编程中的意义):

print("\xF0\x9F\x98\xA2" == "0702")

好像都是Unicode codepoint转码,2位16进制,4位16进制,8位16进制,范围从U+0000到U+00FF 、U+FFFF 和 U+10FFFF。

我们可以确认,与 \u for 用于 UTF-16 代码单元的其他语言不同,在 Python 3 中,它确实是一个代码点。

print("\ud83d\ude22" == "\U0000d83d\U0000de22")

为了完整起见:

print("\U0001f622" == "")
print("\N{CRYING FACE}" == "")

在其他语言中(它们是两个 UTF-16 代码单元),"\ud83d\ude22" 等于 ""

现在,U+D8ED 和 U+DE22 是指定为代理项的 Unicode 代码点。换句话说,不是个字符。他们为UTF-16编码单元保留了相应值的codepoint编码空间。这是当 Unicode 从 2^16 个代码点扩展到 2^21 个代码点时,Unicode 的 USC-2 编码透明地扩展到 UTF-16 的方式。有关详细信息,请参阅 Unicode FAQ.


正如 @Robᵩ 指出的那样,您也可以使用字节串文字:

print("\U0001f622".encode("utf-8") == b"\xF0\x9F\x98\xA2")