Converting string to bytes gives UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 4: invalid start byte
Converting string to bytes gives UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 4: invalid start byte
我有一个 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
对象而不用丢弃任何值。有办法吗?
由于缺少更好的选择,不得不要求 C++ 团队将他们的 python 绑定更改为 return 一个 bytes
包装器,而不是他们的 std::string
边.
我有一个 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
对象而不用丢弃任何值。有办法吗?
由于缺少更好的选择,不得不要求 C++ 团队将他们的 python 绑定更改为 return 一个 bytes
包装器,而不是他们的 std::string
边.