记录解决问题--GBK转UTF-8时,奇数个中文会乱码,偶数个中文不会乱码

1.原因

中文s,gbk转utf-8会扩展字节,中文utf-8字节转gbk,最后一个字节格式不对,直接转为了?(63),再将带问号中文gbk转utf-8字节,最后一个字节就变成了63,输出utf-8的中文最后就乱码了。
清晰原文链接
其实:中文,只要getBytes和new String都是一样的编码,无论如何都不会乱码。而乱码的原因就是其中几种编码之间转换不识别,导致字节码发生了变化,字节码对应的中文就变了,就乱码了。

2.示例

借用网上的一个例子。VM options里面加-Dfile.encoding=GBK,模拟gbk的容器。

    public static void main(String[] args) throws UnsupportedEncodingException {
        String gbk = "我来了";
        String utf8 = new String(gbk.getBytes("UTF-8"));  //这里将utf-8的字节码,翻译为gbk的中文,最后一个字节翻译成了?(63),此时utf8.getBytes()或utf8.getBytes("UTF-8")与gbk.getBytes("UTF-8")得到的字节是不一样了

        //模拟UTF-8编码的网站显示
        System.out.println(new String(utf8.getBytes(),"UTF-8"));

    }

记录解决问题--GBK转UTF-8时,奇数个中文会乱码,偶数个中文不会乱码_第1张图片

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