背景:c++项目调用python模块
由于传输的数据字段比较多,所以考虑使用protobuf对数据进行序列化然后使用二进制进行传输。
问题:在使用Py_BuildValue函数,格式化使用"s#"对数据进行封装。调用函数后传输失败。
原因是数据是二进制流,而格式化使用s#,导致python认为传输的是字符串,而对字符串进行解析时是对字符串进行解码的。而刚好二进制流中存在着中文,所以导致解码失败。
正确的做法是传输二进制流时需要使用y#。
这个问题困扰了我好久,以此记录学习。
背景:c++项目调用python模块
由于传输的数据字段比较多,所以考虑使用protobuf对数据进行序列化然后使用二进制进行传输。
问题:在使用Py_BuildValue函数,格式化使用"s#"对数据进行封装。调用函数后传输失败。
原因是数据是二进制流,而格式化使用s#,导致python认为传输的是字符串,而对字符串进行解析时是对字符串进行解码的。而刚好二进制流中存在着中文,所以导致解码失败。
正确的做法是传输二进制流时需要使用y#。
这个问题困扰了我好久,以此记录学习。