字节 字符与编码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nongfuyumin/article/details/78322271

字符、字节与编码

“字符与编码”是一个被经常讨论的话题。即使这样,时常出现的乱码仍然困扰着大家。虽然我们有很多的办法可以用来消除乱码,但我们并不一定理解这些办法的内在原理。而有的乱码产生的原因,实际上由于底层代码本身有问题所导致的。因此,不仅是初学者会对字符编码感到模糊,有的有经验的开发人员同样对字符编码缺乏准确的理解。
一、编码概念的产生与发展
从计算机对多国语言的支持角度看,大致可以分为三个阶段:

编码 说明
阶段一 ASCII ASCII是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
阶段二 ASCI(本地化) 不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码标准。这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。
阶段三 UNICODE(国际化) Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

二、字符,字节,字符串的概念

解释 例子
字符 人们使用的记号,抽象意义上的一个符号。 ‘1’, ‘中’, ‘a’, ‘$’, ‘¥’等等
字节 计算机中存储数据的单元,一个8位的二进制数,是一个很具体的存储空间。 0x01, 0x45, 0xFA, ……
UNICODE 字符串 在内存中,如果“字符”是以在 UNICODE 中的序号存在的,那么我们称这种字符串为 UNICODE 字符串或者宽字节字符串。 “你好hello”

三、常用编码介绍

分类 编码标准 说明
ASCII 标准ASCII 单字节编码,是一个7位的容器,它总共能表示128个字符,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。
ISO-8859-1 单字节编码,向下兼容ASCII,是一个8位的容器,它总共能表示 256 个字符。
ASNI GB2312 双字节编码,一个字符表示两个字节 整个字符集分成94个区,每区有94个位。每个区位上只有一个字符,因此可用所在的区和位来对汉字进行编码,称为区位码。总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682 个符号,从 B0-F7 是汉字区,包含 6763 个汉字。
GBK 为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940 个码位,它能表示 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。GB2312中汉字是两个字节的
UNICODE UTF-16 UTF-16 具体定义了 Unicode 字符在计算机中存取方法。UTF-16 用两个字节来表示 Unicode 转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示,两个字节是 16 个 bit,所以叫 UTF-16。UTF-16 表示字符非常方便,每两个字节表示一个字符,这个在字符串操作时就大大简化了操作,这也是 Java 以 UTF-16 作为内存的字符存储格式的一个很重要的原因。
UTF-8 多字节编码,UTF-8编码采用一种变长编码规则,如一个英文字母a,只需要一个字节就可以,那么UTF-8编码中a还用一个字节,有些字符需要4个字节才能表示出来,就用4个字节来表示。注意在UTF-8编码中汉字是需要3个字节来表示的。


参考:http://www.regexlab.com/zh/encoding.htm
http://wwwiteye.iteye.com/blog/1985980
http://blog.csdn.net/xiaofan1988/article/details/43282173

猜你喜欢

转载自blog.csdn.net/nongfuyumin/article/details/78322271