以任意编码方式打印整数字符

时间:2013-12-15 11:03:10

标签: python python-3.x

如何为任意编码执行等效的chr()函数?考虑这种尝试(不起作用):

for i in range(128, 255):
    print("%s " % (i.encode('cp1252'),) )

这与AttributeError: 'int' object has no attribute 'encode'失败。

这种尝试都不起作用:

for i in range(128, 255):
    j = "\x%x " % (i,)
    print("%x " % (j.encode('cp1252'),) )

这与SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-2: truncated \xXX escape失败。

我专门针对Python 3。

2 个答案:

答案 0 :(得分:2)

你到底想要达到什么目的?第二次尝试归结为:

for i in range(128, 255):
    j = chr(i)
    print("%x " % (j.encode('cp1252'),) )

但我不知道这对于cp1252来说是如何相当于chrchr(i)从代码页中的位置i转换为相应的字符(返回值是长度为1的unicode字符串)。你可以使用cp1252(或任何其他编码)进行类似的转换 bytes([i]).decode('cp1252'),看起来更像是您的第一次尝试。

答案 1 :(得分:1)

在Python 3中,我相信你想要这个,

chr(i).encode('cp1252')

或在Python 2.x中,您将使用

unichr(i).encode('cp1252')

完整代码是,

for i in range(128, 255):
    print("%s " % (unichr(i).encode('cp1252',errors='replace')))

在我的控制台上,cp1252编码不起作用并抛出异常。要至少打印十六进制值,您可以包含errors部分。

此帖子相关:Python 3: Demystifying encode and decode methodsHow to print non-ascii characters to file in Python 2.7