一分钟了解Java中的乱码问题

我在使用的Java的时候,曾多次遇到过乱码问题,每次虽都通过百度解决的了问题,但还是不了解出现这个问题的原理到底是什么。为了知道为什么,查看了些资料,终于理解了为什么出现乱码问题。

关于乱码,说到底,是编码(把字符按照某种方式转化成一个或多个字节的01字符串)方式和解码(把一个或多个字节按照某种方式转换成字符)方式不匹配导致的。

怎么样才匹配呢,就是说把字符按照某种编码方式,编码成一个或多个字节,然后,再按照某种解码方式把这一个或多个字节中解码成原来的字符。这就可以说编码方式与解码方式是匹配的。

例如,把下面的源代码用utf-8的格式保存,我的电脑操作系统的默认编码是GBK。

public class Test {
    
    
    public static void main(String[] args) {
    
    
        String test = "你好";
        System.out.println(test);
    }
}

下面是采用默认的编码运行程序:

在这里插入图片描述
乱码了!!!

而且,你有没有注意到,我在代码里写的是两个字符,输出的确是三个字符。为什么会这样?

utf-8对大部分汉字采用3个字节进行编码,少量不常用汉字采用4个汉字编码。gbk用2个字节对汉字编码。

在程序中,对于“你好”这两个字,在保存在源代码的时候,计算机用utf-8这种编码方式把这两个字编码成6个字节。而运行的时候,电脑采用的是与GBK编码字符相对应的解码方式解码这6个字节,所以打印出了这三个乱码字符。

我们程序出现乱码的情况还有不只这种,但说到底,其根本原因还是编码方式与解码方式的不匹配导致的。

Guess you like

Origin blog.csdn.net/weixin_43394832/article/details/109758132