打印unicode字符串与打印每个字符,它不匹配的是什么?

2024-06-16 13:50:31 发布

您现在位置:Python中文网/ 问答频道 /正文

s = u'\U0001031e\U0001031d\U0001015c\U0001015d\U00010170\U0001014b\U00010169\U0001016a\U0001016c\xa6\U0001d32c\U0001010c\U0001013a\U00010109\U0001010b\U0001010d\U0001010f\U0001011c\U0001d1ca\U000201b3\U0001016d\U00010184\U00010184'
print s
for a in s: print a, repr(a)

我使用macosxlion,python272,字符串打印得很好,但是循环打印的是'???'以及不正确的u'\u'unicode值。在

以下是打印的值:

^{pr2}$

Tags: printxa6u0001031eu0001015du0001016au00010184u00010170u00010169
1条回答
网友
1楼 · 发布于 2024-06-16 13:50:31

您正在UCS2 Python构建中打印4字节Unicode字符,这些字符在内部存储为每个2个字符,UTF-16 surrogate pair。其中一个副作用是\uffff以上的任何Unicode字符都被打印成这样的对;前导字符是\uD800和{}之间的值,后跟\uDC00到{}范围内的第二个字符。在

您需要重新编译python以支持宽Unicode字符,或者升级到python3.3,它有一个新的内部Unicode表示,可以根据需要在1、2和4字节宽的字符之间切换。在

您可以通过查看sys.maxunicode来测试您的python unicode支持;如果该系统值等于65535,那么您的构建范围很窄(默认),在宽构建中,该值为1114111。在

Mac的默认python是窄Unicode构建;最新的Linux发行版启用宽Unicode标志。在

相关问题 更多 >