找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3935|回复: 0

图解编码基础

[复制链接]
发表于 2012-1-13 14:57:39 | 显示全部楼层 |阅读模式
远古时代:ascii
A long time ago,米国童鞋想打字了,于是就有了ascii码。
ascii码的一个字是8位(一个字节,8个二进制),但是只用后7位(0-127),
英语中一般的字符以及数字、字母;剩下最高位1比特被用作一些通讯系统的奇偶校验。
输出下ascii码
for (byte i = 0; i <= 127; i++)
{
    Console.Write("{0}-0x{0:x}:{1}{2}", i, (char)i, (i + 1) % 4 == 0 ? "\n" : " ");
}
注意:0x0是null,不代表任何字符。
可怕的事情发生了:OEM字符集的衍生
米国童鞋愤怒了:“我受够了每天都只能打这128个字符!不!是127个,第一个什么也不是。啊。。。你妹啊!”。
so!一些不乖的童鞋开始打歪主意了!
一个字节能够表示的数字(编号)有256个,而ASCII字符只用到了0x00~0x7F,也就是占用了前128个,后面128个数字不用白不用!
这些童鞋各自有各自的想法,这就导致了当时销往世界各地的机器上出现了大量各式各样的OEM字符集。
东方国度也开始用电脑啦:多字节字符集(MBCS)和中文字符集
时代在进步,东方的国度也开始用电脑了。
对于欧美国家的童鞋来说,也许ascii足够了,但是对于东方国度,这256个字符远远不够的。
但是东方的人民是无敌的!很快变发明了多字节编码方式。例如中国使用的就是双字节字符集编码。
继续进步!中国的汉字
中国通宵们的汉字系统是博大精深,数量也是比26个字母多了不知道多少倍,但是一切困难在中国童鞋面前都是纸老虎!是纸老虎!
GB2312
用于简体中文,一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
繁体古文怎么办?big5
用于繁体中文,
56个民族是一家!GBK1.0和GB18030
GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。
2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。从汉字字汇上说,GB18030在GB13000.1的20902个汉字的基础上增加了CJK扩展A的6582个汉字(Unicode码0x3400-0x4db5),一共收录了27484个汉字。
混乱的终结!Unicode
太多太多的编码了,慢慢的,全世界的童鞋们发现没有个统一的标准是没法发展进步的,
so!终结者Unicode出现了。
ISO组织的童鞋们对全球混乱的编码标准已经忍无可忍了,所以他们废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号的编码!他们打算叫它"Universal Multiple-Octet Coded Character Set",简称 UCS, 俗称 "UNICODE"。
Unicode是2个字节的,简称为UCS。现在用的是UCS-2,即2个字节编码。2个字节最多能够表示65536个编码。
这样太少,所以出现了UCS-4, 即4个字节编码,由原先的65536个编码扩展至将近100万编码。
UTF8,UTF16和UTF32
UTF,即Unicode Transformer Format,是Unicode代码点(code point)的实际表示方式,按其基本长度所用位数分为UTF-8/16/32。它也可以认为是一种特殊的外部数据编码,但能够与Unicode代码点做一一对应。
UTF-8是变长编码,每个Unicode代码点按照不同范围,可以有1-3字节的不同长度。
//UTF-8是压缩的Unicode编码方式.
UTF-16长度相对固定,只要不处理大于\U200000范围的字符,每个Unicode代码点使用16位即2字节表示,超出部分使用两个UTF-16即4字节表示。按照高低位字节顺序,又分为UTF-16BE/UTF-16LE。
UTF-32长度始终固定,每个Unicode代码点使用32位即4字节表示。按照高低位字节顺序,又分为UTF-32BE/UTF-32LE。
本文链接

您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 03:11 , Processed in 0.018094 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表