java调用接口乱码_Java 两系统接口调用字符乱码问题?

1.两个系统间http协议接口调用,服务端系统编码格式是UTF-8,客户端系统是GBK,

而且两个系统均无法让步让编码统一,客户端端用的是GBK编码传中文,服务端怎么进行转换成UTF-8的,而且响应时还要转成GBK的?

2.首先肯定不能直接通过new String(str.getBytes(“GBK”),”UTF-8″);把GBK转成UTF-8,无论怎么转都是乱的,是不是需要单独写工具类进行转码啊?

你得理解new String(str.getBytes(“GBK”),”UTF-8″);这句话的意义,才能知道为什么会失败。

首先,Java里的String内部是UTF-16LE编码的。

str.getBytes(“GBK”),得到了一个Byte数组,内容是将str的编码转换为GBK。

new String(str.getBytes(“GBK”),”UTF-8″),则是将这个Byte数组的内容当作UTF-8编码的数据,转换为String(UTF-16LE)。

明白了?这样能行才有鬼呢。

客户端和服务器,他们只都是Java,那么Java里的String编码一定是UTF-16。不会受到系统编码(Windows或Linux)的影响。

这种情况下最好不直接发送String,因为String会被你用的库它自动转换编码(以tomcat为例,默认iso8859-1)。

如果你可以直接发送和接收Byte数组,那么你完全可以将协议规定UTF-8。任何一方接受数据都是new String(data, “UTF-8”),发送数据都是str.getBytes(“UTF-8”)。

如果客户端代码你改不了或者用C等别的语言写的。你确

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值