字符编码总结 + 和JAVA相关

不要在CSDN写文章时轻意使用CTRL+Z

阅读过程如果出现了不熟悉的概念,可以去下文的【补充】里找

历史

BCD码

BCD(BinaryCoded Decimal)

最初的计算机性能和存储容量都比较差,所以普遍采用4位BCD编码,将十进制用二进制表示
 BCD编码表示数字还可以,但表示字母或符号就很不好用,需要用多个编码来表示。后来经过演变发展成了ASCII码

ASCII字符集

American Standard Code for Information Interchange, 美国信息交换标准码

最初只使用了7位,称为基本ASCII码

0~31 之间的ASCII码常用于控制像打印机一样的外围设备,称为"控制码"

32~127 之间的ASCII码表示的符号,键盘上都可以被找到

ANSI

在全世界所有国家和地区的文字符号统一编码的UCS/Unicode编码方案问世之前,各个国家、地区为了用计算机记录并显示自己的字符,都在ASCII编码方案的基础上,设计了各自的编码方案。

比如欧洲先后设计了EASCII和ISO/IEC 8859系列字符编码方案;为了显示中文及相关字符,中国设计了GB系列编码(“GB”为“国标”的汉语拼音首字母缩写,即“国家标准”之意)。

同样,日文、韩文以及其他世界各个国家和地区的文字都有它们各自的编码。所有这些各个国家和地区所独立制定的既兼容ASCII又互相之间不兼容的字符编码(准确地来说应该是既兼容ASCII又互相之间不完全兼容,因为这里所说的“不兼容”实际上指的是从整体中除开兼容ASCII之外的部分),微软统称为ANSI编码。

即使知道是ANSI编码,还需要知道这是哪一个国家或地区的才能解码;而且,同一份文本,只能采用一种ANSI编码方案来编码,比如,无法用同一种ANSI编码来表示既有汉字、又有韩文的文本

ANSI的字面意思并非字符编码,而是美国的一个非营利组织——美国国家标准学会(American National Standards Institute)的缩写。ANSI这个组织做了很多标准制定工作,包括C语言规范ANSI C,还有与各国和地区既兼容ASCII又互相不兼容的字符编码相对应的“代码页(Code Page)”标准。

中文编码_简略

GB2312字符集

作用:国家简体中文字符集,兼容ASCII

位数:使用2个字节表示,能表示7445个符号,包括6763个汉字,几乎覆盖所有高频率汉字。

范围:高字节从A1-A7,低字节从A1到FE。将高字节和低字节分别加上0xA0即可得到编码。

GBK字符集

作用:它是GB2312的扩展,加入对繁体字的支持,兼容GB2312.

位数:使用2个字节表示,可表示21886个字符。

范围:高字节从81到FE,低字节从40到FE.

GB18030字符集

作用:它解决了中文、日文、朝鲜语等的编码,兼容GBK。

位数:它采用变字节表示(1ASCII, 2,4字节)。可表示27484个文字。

范围:1字节从00到7F;2字节高字节从81到FE,低字节从40到7E和80到FE;4字节第一三字节从81到FE,第二四字节从30到39

这一系列汉字编码通称叫做 "DBCS"(Double Byte Charecter Set 双字节字符集)

在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里,因此为了支持中文处理,必须要注意字串里的每一个字节的值,如果这个值是大于127的,那么就认为一个双字节字符集里的字符出现了

这种双字节字符编码还产生了一个问题,中文字符占据的宽度和英文字符不同

例:**(双字节,中间并无空格,是两个紧挨着的*)   **(单字节)

在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为"半角",相对地把一个汉字所占的位置称为"全角"

汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都是全角字符。一般的系统命令是不用全角字符的,只是在作文字处理时才会使用全角字符。

半角就是ASCII方式的字符,在编程序的源代码中只能使用半角标点(不包括字符串内部的数据)

系统提供"半角"和"全角"两种不同的输入状态

输入汉字时在两种状态没什么差别,对于英文字母、符号和数字这些通用字符不同于汉字,在半角状态它们被作为英文字符处理;而在全角状态,它们作为中文字符处理。

win设置半角和全角切换快捷键:在系统设置的微软拼音设置里,选择‘按键’

另外需要说明的是:现在全球文本编码的事实标准是 UTF-8 等基于 Unicode 字符集的编码格式。Unicode 吸纳了许多遗留字符,并且为了兼容性而保留了所有字符。所以这些没什么用的全角字符也留下来了。而国家标准也仍在要求字体和软件支持这些全角字符。

全角字符和半角字符在字符集中就是两个码不同的字符,他们表示的含义相同,但是展示的效果有差异。这个差异要么体现在形状上,要么体现在字符宽度上。

Unicode与UCS

当时各个国家都像中国这样搞出一套自己的编码标准,结果互相之间谁也不懂谁的编码,谁也不支持别人的编码

有两个机构都选择去开始制定一个容纳全世界所有文字字符的字符集

(1) 国际标准化组织(ISO),他们于1984年创建ISO/IEC JTC1/SC2/WG2工作组,试图制定一份“通用字符集”(Universal Character Set,简称UCS),于1993年联合发布了一个标准号为ISO/IEC 10646-1的全球统一的通用字符集,称之为Universal Multiple-Octet Coded Character Set(通用多八位组编号字符集,习惯翻译为“通用多八位编码字符集”,但这里将Coded翻译为“编码的”极易误导人),简称为Universal Character Set(即通用字符集,缩写为UCS)
(2) 统一码联盟((The Unicode Consortium),他们由Xerox、Apple等软件制造商于1988年组成,1991开发了Unicode标准(The Unicode Standard),定义了一个全球统一的通用字符集,习惯简称为Unicode字符集(Unicode常被称为统一码、万国码、单一码,严格来说,这些称呼不够严谨或不够准确,因为Unicode字符集只是一个编号字符集CCS,尚未经过字符编码方式CEF和字符编码模式CES进行编码)。

1991年前后,两个项目的参与者都认识到,世界不需要两个不兼容的字符集。于是,它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作

从Unicode 2.0开始,Unicode采用了与ISO 10646-1相同的字库和字码;ISO也承诺,ISO 10646将不会替超出U+10FFFF的UCS-4编码赋值,以使得两者保持一致

两个项目仍都独立存在,并独立地公布各自的标准,但Unicode的知名度要比UCS大得多,实践中的应用也更为广泛得多,已成为了全球统一的通用字符集或编码方案的代名词。因此,Unicode字符编码方案已经成为了全球统一字符编码方案事实上的标准。

unicode发展

设计之初,Unicode 采用 16 bits 对字符进行编号,后来在对中文及更多字符进行编码时,还有兼容老的字符集时,发现 16 bits 不够用,于是在考虑到已经面世的UTF-16的前提下,选择特殊方法进行了扩容,而非推倒一切重新来过

Unicode目前的编码范围为0x0000~0x10FFFF,并将该范围分为17个平面,每个平面拥有65536(2^16)个码位,共1114112个,但是目前只用了少数的几个平面

第0个平面BMP(Basic Multilingual Plane,也称为基本多语言平面、基本多文种平面,往往简称为基本平面、平面0),该平面的编码范围为0x0000~0xFFFF,基本涵盖了当今世界上正在使用中的常用字符。我们平常用到的字符,一般都是位于BMP平面上的,是Unicode最基础和常用的部分

BMP平面以外其他的增补平面SP(Supplementary Plane,也称为辅助平面)要么用来表示一些非常特殊的字符(比如不常用的象形文字、远古时期的文字等),且多半只有专家在历史和科学领域里才会用到它们;要么被留作扩展之用。目前Unicode字符集的17个平面中尚有大量编号空间未被使用。

BMP中0xD800~0xDFFF范围内共2048个码位没有对应任何字符,该范围称为Surrogate。该范围又分为两段,0xD800~0xDBFF包含的1024个码位称为high surroagte,0xDC00~0xDFFF包含的1024个码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值