Python从int转换为Windows-1252

时间:2015-03-09 22:58:02

标签: python

我目前正在编写一个程序,从串口读取数据会添加一些标题信息,然后将这些数据写入.jpg文件。

我需要以Windows-1252编码格式写入文件,是我构造数据的方法,标题是十六进制格式。

在比较应该写的图片和实际写的图片时,我意识到了我的问题,并且看到DOULBE LOW 9 QUOTES没有写成引号而是写为零。

该符号的十进制代码为132 (0x84)。如果我使用chr(0x84),我会收到以下错误

  

UnicodeEncodeError:'charmap'编解码器无法对位置0中的字符\x84进行编码:字符映射到

只有在chr()尝试映射到Latin-1代码集时才有意义。我试图将int转换为unicode,但是从我的研究中,chr是唯一能够做到这一点的函数。

我也尝试在python中使用struct包。

import struct
a = 123;
b = struct.pack("c",a)
print(b)

我收到错误

  

Traceback(最近一次调用最后一次):文件“python”,第3行,in    struct.error:char格式需要一个长度为1的字节对象

阅读过去的问题,答案和文档确实会让人感到困惑,因为混合使用python2和python3的答案与人们转换为ascii(显然无效)。

我在Windows 7计算机上使用Python 3.4.3(最新版本)。

1 个答案:

答案 0 :(得分:1)

UnicodeEncodeError: 'charmap' codec can't encode character \x84

\x84是Windows-1252中较低引号字符的编码。这表明您的数据已经编码,您不应该再尝试对其进行编码。在文本字符串中,引号应显示为"\u201E""\u0084"chr(132)的结果)实际上是control character

你应该有一个字节可以解码到一个字符串:

>>> b"\x84".decode('windows-1252')
'\u201e'

或者您应该有一个文本字符串,您可以编码到字节字符串

>>> "\u201e".encode('windows-1252')
b'\x84'

如果您从某个地方读取数据,则可以像这样使用struct模块

# suppose we download some data:
data=b'*\x00\x00\x00abcde'

a, txt = struct.unpack("I5s", data)
print(txt.decode('windows-1252'))