首页 > 代码库 > 乱码的由来
乱码的由来
看了很多关于乱码的文章,总觉得不够清晰,看的云里雾里。在一本书上看到解释还比较清楚,摘下。
计算机中,字符都是以二进制的数字来存储的,这种字符与数字对应的关系就被称为字符的编码。例如"A"对应的编码是65,这个65就是"A"的ASCII编码。
从计算机的字符编码发展历史来看,大概经历了三个阶段。
(1)第一个阶段是ASCII英文编码阶段,这个时候只支持英语,其他语言不能够在计算机上存储和显示。
(2)第二个阶段是ASCII多种语言编码的阶段,为使计算机支持更多语言,通常使用多个ASCII码组合来表示一个字符,例如汉字通常使用2个字节的ASCII编码来存储。这种编码方式称为ANSI编码。但是,不同的国家和地区制定了不同的标准,由此产生了GB2312,BIG5,JIS等各自的编码标准。在简体中文系统下,ANSI编码代表GB2312编码,在日文操作系统下,ANSI编码代表JIS编码。不同ANSI编码之间互不兼容。如果保存和打开的编码方式不同,就会出现乱码的情况。
(3)第三个阶段是Unicode阶段。为了使国际间信息交流更加方便,国际组织制定了Unicode字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换,处理的要求。现在大部分的操作系统和语言都提供了对Unicode的支持。
Unicode编码时,每个字符会占用4个字节的空间。如果字符中存在大量的英文字母,无疑使用Unicode会浪费许多资源,因此Unicode的编码方式也出现了许多中分化,UTF-8是其中最灵活和常用的编码之一,它在表示传统的ASCII字符时依然只是用1个字节存储,而其他字符不变。这种方式可以节约空间,还可以保证向后与ASCII兼容。
俗话说解铃还须系铃人,要保证能够正确的解释字符,不出现乱码的情况,关键在于选择正确的编码方式进行解码。