java在Socket传输中文乱码解决思路及代码

中文乱码产生的原因就是从GBK转到UTF-8,或者是不同的编码格式来回转,导致byte[]中存放的字节丢失。

思路是:在客户端进行传输前,将需要传输的字节,以一个编码方式进行传输,假设设置GBK,之后在服务端接收到后,先使用new String(byte,“GBK”);去接收,这样只要保证传输时候设置的编码格式和接收的时候设置的编码格式就不会乱码。

案例:对方要发报文,报文头中存在编码格式
解决方案:

public static String getCharsetName(byte[] bytes) {
        byte[] cloneBytes = bytes.clone();
        String xmlMessage = null;
        try {
            xmlMessage = new String(cloneBytes, "GBK");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        String xmlHeader = null;
        if (xmlMessage != null) {
            xmlHeader = xmlMessage.substring(0, 100);
        }
        if (xmlHeader != null) {
            if (xmlHeader.contains("UTF-8") || xmlHeader.contains("utf-8")) {
                return "UTF-8";
            }
            if (xmlHeader.contains("GBK") || xmlHeader.contains("gbk")) {
                return "GBK";
            }
            if (xmlHeader.contains("GB2312") || xmlHeader.contains("gb2312")) {
                return "GB2312";
            }
        }
        // 否则默认返回GBK编码格式
        return "GBK";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值