protobuffer序列化时内容中有中文可以成功,但是在反序列化时失败。原因:
1.序列化时中文未按国际标准UTF8 生成。
解决方法:
序列化时所有内容都UTF8 转换 就可以了。
附:宽字符与UTf8 互转:
// 宽 字符转UTF8
string EncodeUtf8(wstring in)
{
string s(in.length()*3+1,' ');
size_t len = ::WideCharToMultiByte(CP_UTF8, 0,
in.c_str(), in.length(),
&s[0], s.length(),
NULL, NULL);
s.resize(len);
return s;
}
// UTF8 转宽字符
wstring DecodeUtf8(string in)
{
wstring s(in.length(), _T(' '));
size_t len = ::MultiByteToWideChar(CP_UTF8, 0,
in.c_str(), in.length(),
&s[0], s.length());
s.resize(len);
return s;
}
探讨了在使用 Protobuf 进行数据序列化时遇到的中文字符处理问题,特别是在反序列化过程中出现的错误。文章指出,问题的根源在于序列化时中文字符未正确转换为 UTF-8 格式,并提供了具体的解决方案,即确保所有数据在序列化前都转换为 UTF-8 编码。
4298

被折叠的 条评论
为什么被折叠?



