🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
~~~ String srcString = "我们是中国人"; String gbk2UtfString = new String(srcString.getBytes("GBK"), "UTF-8"); System.out.println("GBK转换成UTF-8:" + gbk2UtfString); String gbk2Utf2GbkString = new String(gbk2UtfString.getBytes("UTF-8"), "GBK"); System.out.println("GBK转换成UTF-8再转成GBK:" + gbk2Utf2GbkString); ~~~ 运行结果是: GBK转换成UTF-8:�������й��� GBK转换成UTF-8再转成GBK:锟斤拷锟斤拷锟斤拷锟叫癸拷锟斤拷。 因为,用GBK编码的中文只能用GBK解码,如果用UTF-8解码就会出现乱码。如果要进行编码转换(GBK--UTF-8),GBK编码的中文先用GBK解码,然后再用UTF-8编码。 ***** 分析logstash输出乱码原因: 日志文件的编码是GB2312 ![](https://img.kancloud.cn/3f/ca/3fca52af4bebe41b4276943463f8fee9_842x211.png) filebeat和logstash默认用UTF-8解码,如果用默认配置,中文会如下显示(GBK在filebeat默认用UTF-9解码): ![](https://img.kancloud.cn/a1/77/a1777514a7fda60b440add787a9ba416_580x218.png) 然后在logstash添加输出转码; codec => plain { charset => "GBK" } 具体配置如下: ``` input { beats { port => 5044 codec => plain{ charset => "GB2312" } } } ``` 中文会如下显示(GBK在filebeat用UTF-9解码,然后在logstash又用GBK解码): ![](https://img.kancloud.cn/36/59/3659bde2efead9f88618d0dcab61028e_679x129.png) 正确的解决办法: 在filebeat添加转码配置encoding:GB2312,配置如下: ``` - type: log enabled: true paths: - F:\log\* encoding: GB2312 ``` 中文显示正常: ![](https://img.kancloud.cn/8b/f7/8bf7ee9a0aa68fd76d3fca1fed09d914_497x128.png) 因为,filebeat用GB2312解码日志文件,然后用UTF-8编码字节流输出到logstash。