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字符的实际码点。