protobuffer java中文乱码怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了protobuffer java中文乱码怎么解决相关的知识,希望对你有一定的参考价值。

protobuf支持非UTF8字符串

protobuf规范string类型是必须是UTF8字符,但在C/C++中可以直接调用set方法设置任意编码方式的字符串,也可以直接取得对应字符串,但在控制台中会打印出编码不是UTF8字符的错误信息.

查看protobuf源代码发现是在wire_format.h中有一函数VerifyUTF8String()里进行编码判断的,而且有一宏定义GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED可以取消此错误信息.估计google当初开发时用的是std::string类型,并没有编码方面的强制要求,只是在跨平台时没有统一编码容易引起问题,才统一使用UTF8方式传送字符串.

但像Java,Python缺省就是支持UNICODE,在protobuf库中就已经做了转换或检测,可以修改相关代码不做此转换或检测.

如python中修改lib中的protobufxxx.egg中的decoder.py的StringDecoder()方法,将value.append(local_unicode(buffer[pos:new_pos], 'utf-8'))

改为value.append(buffer[pos:new_pos])
,将field_dict[key] = local_unicode(buffer[pos:new_pos], 'utf-8')
改为field_dict[key] = buffer[pos:new_pos]
即可,Python即不会报异常错误,也能正确取得任意编码的字符串,但需要注意取出后需要进行编码(decode("gbk"))才能正确显示.
另外type_checkers.py中CheckValue()中对str的判断也需要去掉,encoder.py中带'utf-8'的全改了,才能正常编码.

至于如此改会不会有其它潜在的问题,还有待测试.
参考技术A 改设置,把语言改成GBK

eclipse中java代码里出现中文乱码问题

解决

java代码里出现中文乱码怎么解决
首先我们可以打开工具菜单“Project”–“Properties”。
在这里插入图片描述

java代码里出现中文乱码怎么解决
在弹出的窗口选择最上面的“Resource”。

java代码里出现中文乱码怎么解决
接着在右边的“Other”中选择“UTF-8”选项。
在这里插入图片描述

java代码里出现中文乱码怎么解决
完成设置后我们发现代码中的中文就不会再乱码了。

以上是关于protobuffer java中文乱码怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

java数据库中文乱码怎么解决

eclipse中java中文控制台输出的这种乱码怎么解决

eclipse中java代码里出现中文乱码问题

eclipse中java代码里出现中文乱码问题

eclipse mac 乱码怎么解决

jar在eclipse中乱码怎么解决