C++程序和JAVA程序通信的中文乱码问题

背景

C++程序作为ICE客户端通过ICE中间件发送消息给JAVA服务端程序。C++客户端以默认编码格式的字符串传输给JAVA服务端,导致中文乱码。

问题

C++客户端通过GBK格式发送如下消息给JAVA服务端:

"Name:"计算机监控快报","Status":"1","Type":"AGENT"

JAVA服务端收到消息直接打印输出结果如下:

在这里插入图片描述

表明中文乱码,考虑在JAVA服务端进行转换处理。JAVA端实现转为GB2312编码格式:

 try{
      System.out.println(System.getProperty("file.encoding"));// java默认编码是UTF-8
      System.out.println(new String(inStr.getBytes(),"GB2312"));//inStr为收到C++发来的json字符串
  }catch (UnsupportedEncodingException e) {
    e.printStackTrace();
  }

转换后打印输出结果如下:

在这里插入图片描述

表明只能解析出部分字符,仍不能正确解析。

**所以,考虑在客户端进行处理。**即在C++客户端将json字符串转为UTF8编码格式发送给JAVA服务端。

JAVA服务端收到消息打印输出结果如下:

在这里插入图片描述

表明,可以可以正常解析,不存在中文乱码问题。

总结

C++程序在运行时,默认用GBK来处理字符串

Java程序在运行时,默认用UTF8来处理字符串

C++程序发送含中文字符串信息给JAVA程序时,应该在C++程序端将GBK转为UTF8格式进行传输。

同理,JAVA程序发送含中文字符串信息给C++程序时,应该在JAVA程序端将UTF8转为GBK格式进行传输。

即,传输中文数据时,最好在源头(发送端)进行编码格式处理,而不是在接收端处理。

传输英文时,不存在编码格式转换问题。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值