如何为任意编码执行等效的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。
答案 0 :(得分:2)
你到底想要达到什么目的?第二次尝试归结为:
for i in range(128, 255):
j = chr(i)
print("%x " % (j.encode('cp1252'),) )
但我不知道这对于cp1252来说是如何相当于chr
。 chr(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 methods和How to print non-ascii characters to file in Python 2.7