字符 字符集 编码 以及乱码

字符: 各种文字和符号的总称,如一个符号,一个字母
字符集:表示所有字符的集合,就相当于一个二维表,收录能显示的所有的字符。常见的字符集合有ASCII,GB2312,GBK,GB18030,BIG5,Unicode
编码:将字符转化为计算机系统可以识别的数的规则。
解码:将计算机可以识别的数字,用一种规则展现成字符。

ASCII字符集和ASCII编码(单字节)
ASCII(American Standard Code for Information Interchange)美国信息交换标准码。基于拉丁字母的一套电脑编码系统,主要显示现在英语以及常用的一些西方符号。使用7位二进制码表示一个字符,总共表示127个字符。由于一些西欧国家的需要,对于ASCII码做了扩展位EASCII,使用8位表示一个字符,总共可以表示256个字符。

GBXXXX字符集和BIG5(双字节)
当计算机传到了东亚国家,国际的标准被秒杀了。所以不同的国家还是沿用继续扩大ASCII的这个二维表,由于一个字节的八位是显然不够用的,所以出现了双字节编码。不同国家又出现了不同的编码标准。GB2312中国国家标准简体中文字符集对于汉字的编码,使用两个字节表示,仅仅只表示常用的6763字和非汉字682编码。对于繁体字却还是不支持,所以就出现了港台的BIG5以及日本的Shift_JIS。
当然,6763个汉字是不能满足要求的,所以微软发明了GBK,利用GB2312未使用的编码空间进行编码。总共收录了883个符号, 27533个汉字及提供了1894个造字码位。但是并非国家编码标准未被采用,却是微软的,影响较大。后来的GB18130-2000兼容了GBK,GB18130-2005增加我国少数民族文字的超大型中文编码字符集。在GB18030-2000的基础上增加了42711个汉字和多种我国少数民族文字的编码共收录汉字70244个。GB18030-2005标准收录的字符分别以单字节、双字节或四字节编码。GB 18030-2005主要有以下特点:

与UTF-8相同,采用多字节编码,每个字可以由1个、2个或4个字节组成。
编码空间庞大,最多可定义161万个字符。
支持中国国内少数民族的文字,不需要动用造字区。
汉字收录范围包含繁体汉字以及日韩汉字

此时,问题好像解决了,想显示中文,有GB系列,想显示英文有ASCII或者EASCII。各自在本地访问都是没问题的,但是一旦出现在网络中,使用不同的编码方式,互相访问是出现乱码的。每个字符集就是使用了不同的表,每个字符在每个表中的排列顺序不一样,所以一个字符使用GBXXXX编码,使用UTF-8解码就会找不到字符,或者说显示奇怪的字符,就会出现乱码.
Unicode
因此出现了强大的Unicode,将大量的字符都收录在这里,包括汉字,等各个国家常用的字符。在这个字符集里面,所有的字符编码都是唯一的。
UTF-8,UTF-16以及UTF-32都属于Unicode的一种实现方式。
uTF-8是一种可变长的编码方式,表示范围是1~4个字节。UTF-16和UTF-32每个字符用分别表示2或者4个字节和四个字节表示。
它的编码方式也比较简单。比如汉字‘严’,它的unicode十六进制数是4E25,转换成二进制数有15位(100111000100101),至少需要两个字节。有的需要三个四个字节的,怎样区分哪几个字节是表示的一个字符?
所以,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)在Unicode中的十六进制数,如果是单字节的符号,第一位设置为0,其余7位表示在ASCII表中的位置。
(2)对于n字节的字符,其用n个字节表示,其中高位字节的前n位用1表示,第n+1位为0,其余的n-1个字节前两位
都用10表示。其余部分将该字符的Unicode十六进制转化为二进制,从对应低位到高位依次填充,不够补0.
比如严字的Unicode为4E25,在
0000 0800-0000 FFFF之间,对应的二进制数为100111000100101,所以编码结果

 11100100 10111000 10100101

转化为十六进制就是E4B8A5。

Unicode和UCS
历史上, 有两个独立的, 创立单一字符集的尝试. 一个是国际标准化组织(ISO) 的 ISO 10646 项目,此标准所定义的字符集,称作为通用字符集(Universal Character Set,UCS)另一个是由(一开始大多是美国的)多语言软件制造商组成的协会组织的 Unicode 项目 . 幸运的是,1991年前后, 两个项目的参与者都认识到, 世界不需要两个不同的单一字符集. 它们合并双方的工作成果,并为创立一个单一编码表而协同工作. 两个项目仍都存在并独立地公布各自的标准, 但 Unicode 协会和ISO/IEC JTC1/SC2 都同意保持 Unicode 和 ISO 10646 标准的码表兼容, 并紧密地共同调整任何未来的扩展.我们平时会看到UCS-2,UCS-4,就是对应的ISO 10646标准中所定义的,对应的用2个字节或4个字节去表示同一个字符。

常见的乱码问题以及解决办法
1 本地打开的文件出现乱码
问题描述:
在一个编辑器中的文件,在另一个编辑器中打开,出现汉字乱码
2 浏览器出现乱码
① 浏览器的解码方式和文档的编码方式不同
② 浏览器和服务器的编解码方式不同

以上问题的解决办法都是统一编码,不过GB18030对于GBK和GB2312是向下兼容的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值