在Python中不能用xor符号创建unicode字符串文字?

时间:2013-05-17 18:37:29

标签: python unicode string-literals unicode-literals

我正在尝试在Python()中打印xor符号。

我可以很好地打印通用量词:

>>> print u"\u2200"
∀

但是当我做xor时,它会打印8而不是:

>>> print u"\u10308"
8

为什么?

2 个答案:

答案 0 :(得分:4)

当您使用u'\uXXXX'指定unicode时,XXXX必须正好是4个十六进制数字。要指定具有8个十六进制数的unicode,必须使用大写U:u'\UXXXXXXXX'

所以u'\u10308'实际上是两个字符,u'\u1030'后跟u'8'

u'\u1030'MYANMAR VOWEL SIGN UU character,这是一个非间距标记。这个角色本身就是not visible along the baseline。所以你最终看到的是8


您发布的符号是OLD ITALIC LETTER THE unicode字符。

In [103]: print(u'\N{OLD ITALIC LETTER THE}')


In [104]: print(u'\U00010308')

XOR unicode字符是:

In [105]: print(u'\N{XOR}')
⊻

In [106]: print(u'\u22bb')
⊻

您可能会觉得有用的其他字符:

In [110]: print(u'\N{CIRCLED PLUS}')
⊕

In [111]: print(u'\N{CIRCLED TIMES}')
⊗

In [112]: print(u'\N{N-ARY CIRCLED PLUS OPERATOR}')
⨁

In [113]: print(u'\N{N-ARY CIRCLED TIMES OPERATOR}')
⨂

PS。您可以通过以下方式找到(某些)unicode字符的Unicode名称:

In [95]: import unicodedata as UD

In [96]: UD.name(''.decode('utf-8'))
Out[96]: 'OLD ITALIC LETTER THE'

答案 1 :(得分:1)

主要问题是\u转义序列仅使用接下来的四个十六进制数字,因此u"\u10308"是包含Unicode代码点U + 1030(MYANMAR VOWEL SIGN UU)的字符串,后跟{ {1}}。显然,您的终端没有正确的字体来显示缅甸字符,因此打印时不会出现第一个字符。要指定具有四个以上十六进制数字的Unicode代码点,您需要使用8后跟八位数,即\U。但请注意,您尝试获取的角色实际上是OLD ITALIC LETTER THE,它可能看起来像(许多符号之一)XOR但是不同。对于您想要的字形,更合适的选择是U + 2297(CIRCLED TIMES,或⊗)。