【发布时间】:2017-03-14 19:37:17
【问题描述】:
我有一堆二进制数据通过某个 C 接口(不受我控制)的 char* 传入 python,所以我有一个任意二进制数据字符串(通常是字节数组)。我想将其转换为字节数组以简化与其他 python 函数的使用,但我似乎无法弄清楚如何。
不起作用的示例:
data = rawdatastr.encode() 这假定为“utf-8”并破坏数据 == 错误
data = rawdatastr.encode('ascii','ignore') 去除超过 127 个字符 == 不好
data = rawdatastr.encode('latin1') 不确定——这是迄今为止最接近的,但我没有证据表明它适用于所有字节。
data = array.array('B', [x for x in map(ord,data)]).tobytes() 这行得通,但做一些简单的事情似乎需要做很多工作。有没有更简单的?
我想我需要编写自己的身份编码,只传递字节(我认为 latin1 这样做是基于一些阅读但到目前为止还没有证据)。
【问题讨论】:
-
是
str还是bytearray?如果它是str,它已经以某种方式被解码。如果它是一个字节数组,它已经是字节等价的(你可以通过bytes(bytearray_variable)使它实际上是bytes类型) -
它是一个字符串而不是一个字节数组。据我所知,它还没有被解码。如果您“打印”它,它将正确地将字节带入 '\x00\x01' 等..
-
必须经过某种解码,
str不代表二进制数据。不管怎样,我已经在下面回答了。
标签: python-3.x encoding character-encoding