Python chr()函数输出错误



我的chr()函数有问题。我的代码首先接受用户输入,将其放入一个数组中,然后使用ord函数将其转换为相应的数值,并对关键字执行同样的操作。然后,它使用zip函数将两个数组相加以获得数字,并使用上面的chr函数将其放回文本。问题是chr函数输出错误的

E.g

c的数值是99

h的数值为104

它们加在一起形成203

我的代码输出\xcb

当我制作了一个单独的代码,它只是

leb = chr(203)
print leb

它输出203作为宋体,这是一个奇异字符,我需要解码它

这是我的代码

num_string = raw_input("enter what you would like to encrypt")
num_list = []
for num in num_string:
    num_list.append(ord(num)) 
    print num_list
key_string = raw_input("enter the keyword")
key_list = []
for key in key_string:
   key_string = key_list.append(ord(key)) 
   print key_list
end_string = [x + y for x, y in zip(num_list, key_list)]
end_list = []
print end_string
for end in end_string:
    end_list.append(chr(end)) 
print end_list

运行时,这是输出

输入要加密cat 的内容

[99]

[99,97]

[997116]

输入的关键字

[104]

[104197]

[104197116]

[203194232]

['\xcb','\xc2','\xe8']

为什么我的代码会这样做,我该如何修复?

一切都是完全正常的。它只是字符串的值(周围有引号)和在系统代码页中转换字符串后打印字符串之间的差异。在latin1代码页中,字符'xcb'(代码203)有效地打印为Ë

但是打印列表与打印其值不同,忘记使用127以上代码的字符,只需看看这个:

>>> l = [ 'a', 'b', 'c']
>>> print l
['a', 'b', 'c']
>>> print ','.join(l)
a,b,c

因此,当打印字符串列表时,Python会以其表示形式打印每个元素,即用引号括起来。因此,在您的示例中,(假设您的系统编码latin1),您可以写:

...
print end_list
print ''.join(end_list)

你会得到预期的:

['xcb', 'xc2', 'xe8']
ËÂè

正如这个SO问题(python:扩展的ASCII代码)中所建议的,不存在"扩展的ASCII"这回事。

输出是正确的(\xcb=12*2^4+11*2^0),但它显然不是您想要的编码,因此您可能想弄清楚您想要的是什么编码,然后查阅内置编码函数的Python文档。

最新更新