【发布时间】:2015-10-07 22:02:25
【问题描述】:
我想从标准输入读取二进制PNM 图像文件。该文件包含一个编码为 ASCII 文本的标头和一个二进制的有效负载。作为阅读标题的简化示例,我创建了以下 sn-p:
#! /usr/bin/env python3
import sys
header = sys.stdin.readline()
print("header=["+header.strip()+"]")
我将它作为“test.py”运行(来自 Bash shell),在这种情况下它运行良好:
$ printf "P5 1 1 255\n\x41" |./test.py
header=[P5 1 1 255]
但是,二进制有效负载中的一个小变化会破坏它:
$ printf "P5 1 1 255\n\x81" |./test.py
Traceback (most recent call last):
File "./test.py", line 3, in <module>
header = sys.stdin.readline()
File "/usr/lib/python3.4/codecs.py", line 313, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81 in position 11: invalid start byte
有没有一种简单的方法可以在 Python 3 中完成这项工作?
【问题讨论】:
-
您是否尝试更改输入编码? stackoverflow.com/a/16549381/4954037
-
@hiroprotagonist:感谢您的提示。那里指出的方法确实使我找到了一种可能的解决方案——尽管将 Unicode 解码应用于任意二进制数据有点麻烦。
标签: python-3.x unicode binary ascii