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";

你可能感兴趣的:(java,xml,开发语言)