字符乱码问题小结

在工作中,有时会遇到一些字符编码上的问题,一旦文件的编码格式与源文件的编码格式不一致,代码中的一些字符(大多数情况下是中文)就很有可能会出现乱码现象。当时,自己经验不足的时候,要解决这类问题,也常常会让自己耗费不少的时间,现在,根据一些资料来作出一些整理,以便日后的工作中可以更有效率地解决重复问题。

一 常用的字符编码

首先介绍一下计算机中一些主流常见的编码。

1.1 GBK & GB2312 (中文)

  • GB2312
    它是一个简体中文字符集,由 6763 个常用汉字和 682 个全角(指一个字符占用两个标准字符位置的状态)的汉字字符组成。
    GB2312 编码使用两个字节(8位2进制)表示一个汉字,理论上最多可以表示 256 * 256 = 65536 个汉字。这个编码仅在中国可以正常使用,如果是其它国家的网友访问你使用 GB2312 编码的网站,就会出现乱码显示,因为他们的浏览器并不是使用 GB2312 编码格式。

  • GBK
    GBK 主要是为了解决 GB2312 不能表示的生僻字而出现的。

1.2 Unicode(UTF-8 & UTF-16 & UTF-32)

Unicode 编码也称为万国码,它是计算机科学领域的一项业界标准。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

  Unicode 比 ANSI 好用。现在 WIN 的系统内核开始完全支持并完全应用 Unicode 编写,所有 ANSI 字符在进入底层之前,都会被 API 转换成 Unicode。基于此,所以你一开始就是用 Unicode 编码就可以减少转换的用时和 RAM 开销。
  另外在语言中 JAVA / .NET 内置的字符串所使用的字符集已经完全是 Unicode。最重要的是,现在世界上大多数程序用的字符集都是 Unicode。

  不过 Java 中 Unicode 使用 16 进制编码(可以使用 UTF-8 解决),编码太庞大会造成网络传输的负担。

1.3 ISO8859-1

  ISO8859-1 是国际通用编码,一般只有字母就使用此编码格式。它是单字节编码,向下兼容 ASCII,其编码范围是0x00-0xFF。

二 乱码出现的分析

  可以使用下面这段代码,查看系统的属性列表:

  1. public class Test{
  2. publicstaticvoid main(String[] args){
  3. System.getProperties().list(System.out);
  4. }
  5. }

  运行此代码,结果如下(截取部分内容):

… …
  同时,应该需要注意这个属性:

  需要明白乱码出现的本质:其实就是编码格式和解码格式不一致造成的。





posted @ 2017-08-17 23:10  Archy_今日磨墨  阅读(963)  评论(0编辑  收藏  举报