我有一个 python 模块,需要从 py2 适配到 py3。问题是,它接受来自 C++ 模块的 std::string 作为结构的一部分,它在 py2 中是可读的,因为默认的 py2 字符串类型是 bytes
。但是,当尝试使用 py3 启动它时,每当我尝试对其进行任何操作时,它都会尝试使用 utf8 解释该字符串。
基本上,消息反序列化器期望得到一个类似字节的对象,但得到的是一个普通的、虽然不可读的字符串。
例如,这不起作用:
msg_raw_data = bytes(msg.raw_data, encoding='latin-1')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 4: invalid start byte
不幸的是,我无法更改字符串进入模块的方式,但我不需要将该字符串作为实际有效字符串读取 - 我只需要从中提取一个 bytes
对象而不丢弃任何值。有没有办法做到这一点?
答案 0 :(得分:0)
由于缺乏更好的选择,不得不要求 C++ 团队更改他们的 Python 绑定,以从他们这边返回一个 bytes
包装器而不是 std::string
。