如何解释格式(n,'c')超出ASCII的结果?

时间:2015-09-30 06:30:53

标签: python python-2.7

考虑以下示例:

format(97, 'c')
format(6211, 'c')

第一个输出'a'显然是正确的;然而,第二个输出'C',我不明白为什么。

string format specification表示:

  

'c':性格。在打印之前将整数转换为相应的unicode字符。

所以不应该将6211映射到中文的的Unicode字符吗?

相关的sysinfo:CPython 2.7.10,在Fedora 22上。

1 个答案:

答案 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')