Python 如何解释ASCII以外的格式(n,';c';)的结果?
考虑以下示例:Python 如何解释ASCII以外的格式(n,';c';)的结果?,python,python-2.7,Python,Python 2.7,考虑以下示例: format(97, 'c') format(6211, 'c') 第一个输出显然正确的'a';但是,第二个输出'C',我不明白为什么 缔约国指出: c:字符。打印前将整数转换为相应的unicode字符 所以不应该将6211映射到其Unicode字符我中文 相关系统信息:CPython 2.7.10,在Fedora 22上。您正在看到 问题是format(int,'c')在内部调用int.\uuuu format\uuuuu('c'),并且它返回一个str值(Python 2.
format(97, 'c')
format(6211, 'c')
第一个输出显然正确的'a'
;但是,第二个输出'C'
,我不明白为什么
缔约国指出:
c:字符。打印前将整数转换为相应的unicode字符
所以不应该将6211
映射到其Unicode字符我代码>中文
相关系统信息:CPython 2.7.10,在Fedora 22上。您正在看到
问题是format(int,'c')
在内部调用int.\uuuu format\uuuuu('c')
,并且它返回一个str值(Python 2.x中的字节),因此它总是在范围内(0,256)。因此,对于256这样的值,它会返回到0
。范例-
>>> format(256,'c')
'\x00'
根据这个问题,他们说修复方法是使用Python3,其中字符串是unicode,因此Python3.x中没有这个问题
我能想到的唯一解决办法是改用-
>>> unichr(0x6211)
u'\u6211'
>>> print(unichr(0x6211))
我
尽管请注意,6211
是一个整数,它不是您要查找的unicode字符,而是映射到的。您要查找的是0x6211
,它是一个十六进制值,映射到Python 3.x中的格式(0x6211,'c')
。用于检测0x6211
我代码>+1。请注意,Unicode代码点是十六进制的,而不是十进制的;'a'是U+0061,即十进制97,和'我' 是U+6211,即十进制25105。十进制6211将是U+1843蒙古语字母TODO长元音符号ᡃ代码>。