Java文字编码ASCII、Unicode、UTF-8

1.字符编码的发展

第一阶段:ASCII阶段,(American Standard Code for Information Interchange, “美国信息交换标准码),计算机当时只支持英语,字符在计算机中都是以0和1的方式存储的。象a、b、c、d这样的52个字母(包括大写)、以及0、1、 2等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,就必须要有一定的规则, 于是美国有关的标准化组织就出台了所谓的ASCII编码,统一规定了上述常用符号用哪个二进制数来表示。(来自百度百科),ASCII码规定每个字符例如 “a”使用1个字节来表示,也就是8为的二进制组合,那么就有00000000-11111111一共256种组合,也就是可以表示256个不同的字符。

其中0-31:是控制字符或通讯专用字符(不可以显示的字符,其余为可显示字符),如控制符:LF(换行)、CR(回车)等。

32-126:是字符,其中32是空格,48-57为0-9的阿拉伯数字,65-90为26个大写英文字母,97-122为26个小写英文字母,其余的是一些标点符号,运算符号等。

ASSCII共计有128个,从0到127,也就是从00000000-01111111,最高位都是0。

第二阶段:ANSI编码(本地化)阶段,ASCII只能表示英文字符,那么其他字符怎么表示呢?汉语是这样解决的,用两个ASCII表示一个汉字, 而且不用前面的128个,为什么不用已经在上一篇中介绍了,因为前128个事人家的英文。不能占啊,否则就混乱了。比如汉字“中”在中文操作系统中使用 [0xD6,0xD0] 这两个字节存储,为什么呢,这里简单解释一下,“中”的区位码是 54 48 ,那么“中”的,国标码就是54 48的十六进制+上2020H=5650H,那么“中”的机内码就是=“中的国标码+8080H=D6D0H(这都是上一篇的内容,不明白的可以看上一 篇),这样每个汉字也都有了自己的编码,汉字编码解决了,这就是中国的GB2312编码标准,但是这是中国汉字的编码,那么其他国家呢?其他的国家的计算 机操作系统中可能把[0xD6,0xD0] 这两个字节存储成他们的文字,而不是“中”,不同的国家和地区制定了不同的标准,这些使用 2 个字节来代表一个字符的各种文字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。

第三阶段:UNICODE(国际化),为了使国际间信息交流更加方便,国际组织制定了 UNICODE 字符集, 为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode用数字0-0x10FFFF来映 射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32 都是将数字转换到程序数据的编码方案。

下面说一下,Unicode编码Utf-8,utf-8是unicode的实现的一种方式,Unicode规定世界上每个字符对应的编码号,utf-8定义了如何存储字符

他们的转换规则如下:

Unicode符号范围 | UTF-8编码方式
(十六进制) |(二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
 

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。 

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。 

下面用实例说明一下查看“连通”的utf-8编码:“连通”的unicode编码是:8FDE 901A 这个可以从网上查询(可以再word中,输入汉字,然后按alt+x转化成unicode),这是规定的。8FDE 和901A 在上面表格中第三行,也就是占用3个字节,按照规则转换,最后"连通"的utf-8编码是 

E8 BF 9E E9 80 9A,也就是在计算中存贮的编码

一步一个脚印,方便自己复习,该出手时就出手,有错误,一定要指正,非常感谢,共同进步! 
源地址: http://www.cnblogs.com/o-andy-o/archive/2012/04/11/2441937.html

2.“心”字的编码方式如下: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值