1

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

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

>>> print u"\u2200"
∀

但是当我做异或时,它会打印 8 :

>>> print u"\u10308"
8

为什么?

4

2 回答 2

4

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

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

u'\u1030'MYANMAR VOWEL SIGN UU字符,它是一个非间距标记。该字符本身沿基线不可见。所以你最终看到的只是8.


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

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


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

XORUnicode字符是:

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'
于 2013-05-17T18:42:08.847 回答
1

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

于 2013-05-17T18:47:40.717 回答