Python 2.7:unicode表示的名称
这些不同类型的unicode ascii表示形式的名称是什么Python 2.7:unicode表示的名称,python,unicode,utf-8,unicode-escapes,unicode-literals,Python,Unicode,Utf 8,Unicode Escapes,Unicode Literals,这些不同类型的unicode ascii表示形式的名称是什么 \xF0\x9F\x98\xA2 \U0001f622 他们所属的集合是否有一个比“表示”更具体的术语?在这些上下文中,我将如何描述非ascii表示(,正如Tom Blodget已经警告过您的,这是一个特定于python的答案 前导的\显示这是一个转义序列 \x表示接下来的两个字符将被解释为十六进制数字 \U表示接下来的八个字符将被解释为32位十六进制值 您可以在此处阅读更多有关内容: 要完全回答您的问题: \xF0\x9F
\xF0\x9F\x98\xA2
\U0001f622
他们所属的集合是否有一个比“表示”更具体的术语?在这些上下文中,我将如何描述非ascii表示(,正如Tom Blodget已经警告过您的,这是一个特定于python的答案
前导的
\
显示这是一个转义序列
\x
表示接下来的两个字符将被解释为十六进制数字
\U
表示接下来的八个字符将被解释为32位十六进制值
您可以在此处阅读更多有关内容:
要完全回答您的问题:
只是四个ASCII字符,您有它们的十六进制值\xF0\x9F\x98\xA2
是一个使用32位十六进制值编码的UNICODE码点\U0001f622
- Python3的
首先,似乎对十六进制转义有误解:
为了完整性(我记得在机器代码中有效地使用了八进制,其中一些指令有3位对齐的参数,但我看不出真正编程的意义): 看起来它们都是Unicode码点转义,分别为2位十六进制、4位十六进制和8位十六进制,范围从U+0000到U+00FF、U+FFFF和U+10FFFF 我们可以确认,与其他语言不同的是,在Python 3中,\u for表示UTF-16代码单元,它实际上是一个代码点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}")
为了完整性:print("\ud83d\ude22" == "\U0000d83d\U0000de22")
打印(“\U0001f622”=="这似乎是一个特定于语言的问题,或者至少会有特定于语言的答案。此外,如果允许十六进制字节格式,则不会将字节解释为Unicode。例如,在C#中不允许。在JavaScript中,它表示ISO 8859-1中的字节,然后将其作为Unicode字符放入字符串中。第一个s也是第二个的UTF-8编码。超出范围
到\x00
的十六进制值不是ASCII。这不是16位十六进制值,而是32位。技术术语是“码点”,而不是“字符”是的,我把十六进制值和十六进制数字混淆了。8个十六进制数字表示32位,你说得对,我编辑了答案。@MarkRansom你是说这个答案中的第二个项目符号应该是“\x7f
是UNICODE代码点”?@NathanHinchey正是。对\U0001f622
的处理可能取决于您使用的Python版本和内部版本。对我来说,\u
在2.7上产生u“\ud83d\ude22”==u'\U0001f622'
,但在3.6上产生True
。False
print("\ud83d\ude22" == "\U0000d83d\U0000de22")