考虑以下示例:
format(97, 'c')
format(6211, 'c')
第一个输出'a'
显然是正确的;然而,第二个输出'C'
,我不明白为什么。
string format specification表示:
'c':性格。在打印之前将整数转换为相应的unicode字符。
所以不应该将6211
映射到中文的我
的Unicode字符吗?
相关的sysinfo:CPython 2.7.10,在Fedora 22上。
答案 0 :(得分:6)
您正在看Issue 7267 - format method: c presentation type broken in 2.7。
问题是format(int, 'c')
内部调用int.__format__('c')
,它返回一个str值(Python 2.x中的字节),因此它总是在范围(0,256)内。因此,对于像256这样的值,它会回到0
。示例 -
>>> format(256,'c')
'\x00'
根据问题,他们说修复将是使用Python 3,其中字符串是unicode,因此Python 3.x中没有问题。
我能想到的唯一解决方法是使用unichr()
代替 -
>>> unichr(0x6211)
u'\u6211'
>>> print(unichr(0x6211))
我
虽然请注意,6211
是一个整数,而不是您要查找的unicode字符,它映射到0x1843
。你要找的是0x6211
,这是一个十六进制值,它映射到{3.}},即Python 3.x中的format(0x6211,'c')
。