【发布时间】:2015-03-09 22:58:02
【问题描述】:
我目前正在编写一个从串行端口读取数据的程序,添加一些头信息,然后将这些数据写入 .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 行,在 struct.error: char 格式需要长度为 1 的字节对象
阅读过去的问题、答案和文档确实会让人感到困惑,因为混合了 python2 和 python3 的答案以及转换为 ascii 的人(这显然行不通)。
我在 Windows 7 机器上使用 Python 3.4.3(最新版本)。
【问题讨论】:
-
你试过使用struct模块吗? docs.python.org/2/library/struct.html
-
@danielfranca 是的,我有。将用我对 struct 的尝试更新问题。
-
试试
a = bytes([123])。我得到的结果是b'{'。 -
@martineau 试试 bytes([132]),你得到了什么?
-
如果我之后
print(a),我得到b'\x84',并且0x84 == 132(并且a[0]也是132)。
标签: python