乱码是如何产生的?

字符编码:

计算机中只能处理二进制数,那么字符是如何在计算机中表示的呢? 一个编码表就可以解决了,每一个编码对应一个字符。编码表可有很多种,先来看看下面的编码格式:

  1. ASCLL:使用 8 位有符号二进制数表示(一个字节)最高为是0,代表正数,0-127每一个数字代表一个字符。共128个。

    iso-8859-1:(一个字节) 收录了西欧语言。

  2. GB2312 / GBK :依然用一个字节的正数表示字符。用两个字节的负数表示一个汉字,最高位是1(中文的二进制是负数)。

    GBK家族:GB2312 / GBK / GB18030(支持中文,占两个字节)
    ANSI :指GB2312。

  3. Unicode :(通用码)全世界所有符号统一编码(字符都占两个字节)
    Unicode只是一个编码规范,目前实际实现的unicode编码只有三种:UTF-8, UCS-2UTF-16,三种unicode字符集之间可以按照规范进行转换。

    UTF-8: 是一种对Unicode的可变长字符编码,又称万国码(中文使用三字节,ASCII中每个字符的编码在UTF-8中是完全一样的)使用广泛。
    UTF-8 BoM: 微软自己的编码,建议不用(默认多占三个字节)。

总结:

  • 存数字或字符,无论使用什么编码,只占一个字节。
  • 存汉字, GBK家族占两个字节,UTF-8 家族占三个字节。

在开发过程中,相信大家都遇到过乱码问题,问题是怎么产生的呢?在计算机中只能处理 0 和 1, 所以所有的字符在计算机中处理时,都要使用编码规则,将字符转换成二进制(编码),待计算机处理完成,将结果显示在屏幕时,需要将二进制数转换成对应的字符(解码)。若在编码和解码时使用了不同的编码格式,自然就会产生乱码。解决乱码的方法,就是想办法使编码和解码使用同一种编码格式即可。

你可能感兴趣的:(*Java)