Unicode 字符编码规范
字符编码规范字符编码规范
字符编码规范
网络技术
网络技术网络技术
网络技术 gz818 12 月
月月
月 27th. 2007, 3:23pm
Unicode 字符编码规范
字符编码规范字符编码规范
字符编码规范
Unicode 是一种字符编码规范
是一种字符编码规范是一种字符编码规范
是一种字符编码规范 。
。。
。
先从
先从先从
先从 ASCII 说起
说起说起
说起。
。。
。ASCII 是用来表示英文字符的一种编码规范
是用来表示英文字符的一种编码规范是用来表示英文字符的一种编码规范
是用来表示英文字符的一种编码规范,
,,
,每个
每个每个
每个 ASCII 字符占用
字符占用字符占用
字符占用 1 个
个个
个
字节
字节字节
字节(
((
(8bits)
))
)
因此
因此因此
因此,
,,
,ASCII 编码可以表示的最大字符数是
编码可以表示的最大字符数是编码可以表示的最大字符数是
编码可以表示的最大字符数是 256,
,,
,其实英文字符并没有那么多
其实英文字符并没有那么多其实英文字符并没有那么多
其实英文字符并没有那么多,
,,
,一般只用前
一般只用前一般只用前
一般只用前
128 个
个个
个(
((
(最高位为
最高位为最高位为
最高位为 0),
),),
),其中包括了控制字符
其中包括了控制字符其中包括了控制字符
其中包括了控制字符、
、、
、数字
数字数字
数字、
、、
、大小写字母和其他一些符号
大小写字母和其他一些符号大小写字母和其他一些符号
大小写字母和其他一些符号
。
。。
。
而最高位为
而最高位为而最高位为
而最高位为 1 的另
的另的另
的另 128 个字符被成为
个字符被成为个字符被成为
个字符被成为“
““
“扩展
扩展扩展
扩展 ASCII”
””
”,
,,
,一般用来存放英文的制表符
一般用来存放英文的制表符一般用来存放英文的制表符
一般用来存放英文的制表符、
、、
、部分音
部分音部分音
部分音
标字符等等的一些其他符号
标字符等等的一些其他符号标字符等等的一些其他符号
标字符等等的一些其他符号
这种字符编码规范显然用来处理英文没有什么问题
这种字符编码规范显然用来处理英文没有什么问题这种字符编码规范显然用来处理英文没有什么问题
这种字符编码规范显然用来处理英文没有什么问题
。(
。(。(
。(实际上也可以用来处理法文
实际上也可以用来处理法文实际上也可以用来处理法文
实际上也可以用来处理法文、
、、
、德文等一些其他的西欧字符
德文等一些其他的西欧字符德文等一些其他的西欧字符
德文等一些其他的西欧字符,
,,
,但是不能和英文通用
但是不能和英文通用但是不能和英文通用
但是不能和英文通用),
),),
),但
但但
但
是面对中文
是面对中文是面对中文
是面对中文、
、、
、阿拉伯文之类复杂的文字
阿拉伯文之类复杂的文字阿拉伯文之类复杂的文字
阿拉伯文之类复杂的文字,
,,
,255 个字符显然不够用
个字符显然不够用个字符显然不够用
个字符显然不够用
于 是
于 是于 是
于 是 ,
,,
, 各 个 国 家 纷 纷 制 定 了 自 己 的 文 字 编 码 规 范
各 个 国 家 纷 纷 制 定 了 自 己 的 文 字 编 码 规 范各 个 国 家 纷 纷 制 定 了 自 己 的 文 字 编 码 规 范
各 个 国 家 纷 纷 制 定 了 自 己 的 文 字 编 码 规 范 ,
,,
, 其 中 中 文 的 文 字 编 码 规 范 叫 做
其 中 中 文 的 文 字 编 码 规 范 叫 做其 中 中 文 的 文 字 编 码 规 范 叫 做
其 中 中 文 的 文 字 编 码 规 范 叫 做
“
““
“GB2312-80”
””
”,
,,
,它是和
它是和它是和
它是和 ASCII 兼容的一种编码规范
兼容的一种编码规范兼容的一种编码规范
兼容的一种编码规范,
,,
,其实就是利用扩展
其实就是利用扩展其实就是利用扩展
其实就是利用扩展 ASCII 没有真正标
没有真正标没有真正标
没有真正标
准化这一点
准化这一点准化这一点
准化这一点,
,,
,把一个中文字符用两个扩展
把一个中文字符用两个扩展把一个中文字符用两个扩展
把一个中文字符用两个扩展 ASCII 字
字字
字符来表示
符来表示符来表示
符来表示。
。。
。
但
但但
但 是这个方法有问题
是这个方法有问题是这个方法有问题
是这个方法有问题,
,,
,最大的问题就是
最大的问题就是最大的问题就是
最大的问题就是,
,,
,中文文字没有真正属于自己的编码
中文文字没有真正属于自己的编码中文文字没有真正属于自己的编码
中文文字没有真正属于自己的编码,
,,
,因为扩展
因为扩展因为扩展
因为扩展
ASCII 码虽然没有真正的标准化
码虽然没有真正的标准化码虽然没有真正的标准化
码虽然没有真正的标准化,
,,
,但是
但是但是
但是 PC 里的
里的里的
里的 ASCII 码还是有一个事
码还是有一个事码还是有一个事
码还是有一个事 实标准的
实标准的实标准的
实标准的(
((
(存放着
存放着存放着
存放着
英文制表符
英文制表符英文制表符
英文制表符),
),),
),所以很多软件利用这些符号来画表格
所以很多软件利用这些符号来画表格所以很多软件利用这些符号来画表格
所以很多软件利用这些符号来画表格。
。。
。这样的软件用到中文系统中
这样的软件用到中文系统中这样的软件用到中文系统中
这样的软件用到中文系统中,
,,
,这些表
这些表这些表
这些表
格符就会被误认作中文字
格符就会被误认作中文字格符就会被误认作中文字
格符就会被误认作中文字,
,,
,破坏版面
破坏版面破坏版面
破坏版面。
。。
。而且
而且而且
而且,
,,
,统计中英
统计中英统计中英
统计中英 文混合字符串中的字数
文混合字符串中的字数文混合字符串中的字数
文混合字符串中的字数,
,,
,也是比较
也是比较也是比较
也是比较
复杂的
复杂的复杂的
复杂的,
,,
,我们必须判断一个
我们必须判断一个我们必须判断一个
我们必须判断一个 ASCII 码是否扩展
码是否扩展码是否扩展
码是否扩展,
,,
,以及它的下一个
以及它的下一个以及它的下一个
以及它的下一个 ASCII 是否扩展
是否扩展是否扩展
是否扩展,
,,
,然后才
然后才然后才
然后才
“
““
“猜
猜猜
猜”
””
”那可能是一个中文字
那可能是一个中文字那可能是一个中文字
那可能是一个中文字
。
。。
。
总之当时处理中文是很痛苦的
总之当时处理中文是很痛苦的总之当时处理中文是很痛苦的
总之当时处理中文是很痛苦的。
。。
。而更痛苦的是
而更痛苦的是而更痛苦的是
而更痛苦的是 GB2312 是国家
是国家是国家
是国家标准
标准标准
标准,
,,
,台湾当时有一个
台湾当时有一个台湾当时有一个
台湾当时有一个 Big5
编码标准
编码标准编码标准
编码标准,
,,
,很多编码和
很多编码和很多编码和
很多编码和 GB 是相同的
是相同的是相同的
是相同的,
,,
,所以
所以所以
所以……
…………
……,
,,
,嘿嘿
嘿嘿嘿嘿
嘿嘿。
。。
。
这
这这
这 时候
时候时候
时候,
,,
,我们就知道
我们就知道我们就知道
我们就知道,
,,
,要真正解决中文问题
要真正解决中文问题要真正解决中文问题
要真正解决中文问题,
,,
,不能从扩展
不能从扩展不能从扩展
不能从扩展 ASCII 的角度入手
的角度入手的角度入手
的角度入手,
,,
,也不能仅靠
也不能仅靠也不能仅靠
也不能仅靠
中国一家来解决
中国一家来解决中国一家来解决
中国一家来解决。
。。
。而必须有一个全新的编码系统
而必须有一个全新的编码系统而必须有一个全新的编码系统
而必须有一个全新的编码系统,
,,
,这个系统要可以将中
这个系统要可以将中这个系统要可以将中
这个系统要可以将中 文
文文
文、
、、
、英文
英文英文
英文、
、、
、法文
法文法文
法文、
、、
、
德文
德文德文
德文……
…………
……等等所有的文字统一起来考虑
等等所有的文字统一起来考虑等等所有的文字统一起来考虑
等等所有的文字统一起来考虑,
,,
,为每个文字都分配一个单独的编码
为每个文字都分配一个单独的编码为每个文字都分配一个单独的编码
为每个文字都分配一个单独的编码,
,,
,这样才不会
这样才不会这样才不会
这样才不会
有上面那种现象出现
有上面那种现象出现有上面那种现象出现
有上面那种现象出现。
。。
。
于是
于是于是
于是,
,,
,Unicode 诞生了
诞生了诞生了
诞生了。
。。
。
Unicode 有两套标准
有两套标准有两套标准
有两套标准,
,,
,一套叫
一套叫一套叫
一套叫 UCS-2(Unicode-16),
,,
,用
用用
用 2 个字节为字符编码
个字节为字符编码个字节为字符编码
个字节为字符编码,
,,
,另一套叫
另一套叫另一套叫
另一套叫
UCS-4(Unicode-32),
,,
,用
用用
用 4 个字节为字符编码
个字节为字符编码个字节为字符编码
个字节为字符编码。
。。
。
以目前常用的
以目前常用的以目前常用的
以目前常用的 UCS-2 为例
为例为例
为例,
,,
,它可以表示的字符数为
它可以表示的字符数为它可以表示的字符数为
它可以表示的字符数为 2^16=65535,
,,
,基本上可以容纳所有的欧
基本上可以容纳所有的欧基本上可以容纳所有的欧
基本上可以容纳所有的欧
美字符和绝大部分的亚洲字符
美字符和绝大部分的亚洲字符美字符和绝大部分的亚洲字符
美字符和绝大部分的亚洲字符
。
。。
。
UTF-8 的问题后面会提到
的问题后面会提到的问题后面会提到
的问题后面会提到 。
。。
。
在
在在
在 Unicode 里
里里
里,
,,
,所有的字符被一视同仁
所有的字符被一视同仁所有的字符被一视同仁
所有的字符被一视同仁。
。。
。汉字不再使用
汉字不再使用汉字不再使用
汉字不再使用“
““
“两个扩展
两个扩展两个扩展
两个扩展 ASCII”
””
”,
,,
,而是使用
而是使用而是使用
而是使用“
““
“1
个
个个
个 Unicode”
””
”,
,,
,注意
注意注意
注意,
,,
,现在的汉字是
现在的汉字是现在的汉字是
现在的汉字是“
““
“一个字符
一个字符一个字符
一个字符”
””
”了
了了
了,
,,
,于是
于是于是
于是,
,,
,拆字
拆字拆字
拆字、
、、
、统计字数这些问题也就
统计字数这些问题也就统计字数这些问题也就
统计字数这些问题也就
自然而然的解决了
自然而然的解决了自然而然的解决了
自然而然的解决了
。
。。
。
但是
但是但是
但是,
,,
,这个世界不是理想的
这个世界不是理想的这个世界不是理想的
这个世界不是理想的,
,,
,不可能在一夜之间所有的系统都使用
不可能在一夜之间所有的系统都使用不可能在一夜之间所有的系统都使用
不可能在一夜之间所有的系统都使用 Unicode 来处理字符
来处理字符来处理字符
来处理字符,
,,
,