您的位置:首页 > 其它

字符集、编码和Unicode

2016-05-29 22:23 579 查看
部分来自《深入理解C++11》。

      在计算机中,总是使用二进制位组合来表示复杂的信息。首当其冲需要被标识的就是字符。为了使二进制组合标识字符的方法在不同设计的计算机间通用,就迫切需要统一的字符编码方法。于是在20世纪60年代的时候,ASCII字符编码就出现了。在ANSI颁布的标准中,基本ASCII的字符使用了7个二进制位进行标识,这意味着可以标识128种不同的字符。这对英文字符(以及一些控制字符、标点符号等)来说绰绰有余,不过随着计算机在全世界的普及,非字符构成的语言(如中文)也需要得到支持,
128个字符对于全世界众多语言而言就显得力不从心了。

      到了20世纪90年代, ISO与Unicode两个组织共同发布了能够唯一地表示各种语言中的字符的标准。通常情况下, 我们将一个标准中能够表示的所有字符的集合称为字符集。通常,我们称ISO/Unicode所定义的字符集为Unicode。在Unicode中,每个字符占据一个码位(Code point)。Unicode字符集共定义了1 114 112个这样的位,使用从0到10FFFF的十六进制数唯一地表示所有的字符。虽然字符集中的码位唯一,但由于计算机存储数据通常是以字节为单位的,而且出于兼容之前的ASCII、大数小段数段、节省存储空间等诸多原因,通常情况下,我们需要一种具体的编码方式来对字符码位进行标识。比较常见的基于Unicode字符集的编码方式有UTF-8、UTF-16及UTF-32(一般人常常把UTF-16和Unicode混为一谈)。

      以UTF-8为例,其采用了1-6字节的变长编码方式编码Unicode,英文通常使用1字节表示,且与ASCII是兼容的,而中文常用3字节标示。 下图表示的就是UTF-8的编码方式。UTF(Unicode Transformation Format ).



请注意UTF-8编码的规律! 提取出的x序列为 code-point的二进制数。

这篇文章很好:http://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html

例如: 

      '黄' 的code-point为40644(也就是字符编号),  使用UTF-16的编码为 0x9EC4,  使用UTF-8的编码为 e9 bb 84(字节序列), 转成二进制如下:

11101001, 10111011, 10000100,根据上表,提取出x的序列为  1001111011 000100, 表示十进制的值为40644

这个网站可以查看Unicode字符集的code-point:http://unicode-table.com/cn/




请务必看此文:http://blog.csdn.net/natsu1211/article/details/8518398

这是英文原文:http://www.joelonsoftware.com/articles/Unicode.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: