两个python解释器会话。第一个来自CentOS上的python。第二个来自macosx10.7上的内置python。为什么第二个会话从转义序列中创建长度为2的字符串,然后出错?在
$ python
Python 2.6.6 (r266:84292, Dec 7 2011, 20:48:22)
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> u'\U00000020'
u' '
>>> u'\U00000065'
u'e'
>>> u'\U0000FFFF'
u'\uffff'
>>> u'\U00010000'
u'\U00010000'
>>> len(u'\U00010000')
1
>>> ord(u'\U00010000')
65536
我对此一点也不确定,但可能是您的macosx系统使用了python的“窄构建”,它表示unicode,只有16位用于unicode的内部编码,并将2**16以上的unicode代码点表示为一个字符对(这将解释
len(u'\U00010000') == 2
)。在在OSX上尝试
unichr(0x10000)
,看看在引用窄版本时是否出现错误。另见What encoding do normal python strings use?,尤其是IVH的回答。在即使系统上默认的python使用窄版本,也可以重新编译python以使用宽版本。在
相关问题 更多 >
编程相关推荐