Python解码和编码

Python解码和编码,python,unicode,Python,Unicode,我不知道如何通过特定的代码页提供十进制代码点列表,以便对其进行解码(或编码?) str_0 = 'abc' lst_decimal = list(str_0.encode("utf-8")) for i in lst_decimal: print (str(int(i)).decode("cp437")) 错误:“str”对象没有属性“decode”str\u 0。encode(“utf-8”)返回一个bytes对象,该对象具有decode方法,但当您将其转换为列表时,它将成为ints

我不知道如何通过特定的代码页提供十进制代码点列表,以便对其进行解码(或编码?)

str_0 = 'abc'
lst_decimal = list(str_0.encode("utf-8"))
for i in lst_decimal:
    print (str(int(i)).decode("cp437"))
错误:“str”对象没有属性“decode”

str\u 0。encode(“utf-8”)
返回一个
bytes
对象,该对象具有
decode
方法,但当您将其转换为列表时,它将成为ints上的列表。只需将其保留为字节对象:

my_bytes = str_0.encode("utf-8") 
print (my_bytes.decode("cp437")) #prints abc
更简单地说:

print(str_0.encode("utf-8").decode("cp437"))
另外一个好处是,不需要在循环中使用
decode
——整个
字节
对象可以一次解码

如果您想保留原始的
lst_decimal
,并执行您试图执行的操作,那么您的循环可以如下所示:

for i in lst_decimal:
    print(bytes([i]).decode("cp437"))

list()
bytes
对象转换为int列表,然后
bytes
向后移动。但是请注意,只要
bytes(i)
返回一个
i
字节列表,每个字节都初始化为
0

我偶然发现了print(struct.pack('B',int(i).decode('cp866')),这就是我想要的。但是有没有办法用你建议的方法来解决这个问题呢?”i是我希望有可能更改的原始十进制值。@DmitryStarostin我在最后给出的应该有效。在您的评论中,i已经是一个整数,因此
int(i)
是多余的
bytes([i]).decode()
有效——但请注意方括号!有一个
int.to_bytes()
方法,但它不是很方便(您需要指定字节数和字节顺序)。一个复杂的事实是,当您将
字节
转换为整数列表时,这些整数的范围为0-255。使用Unicode,单个字符可能对应2个或更多字节
ord()
提供Unicode字符的实际码点。