编码,charset,乱码,unicode,utf-8与net简单释义(转)
上一篇 / 下一篇 2009-08-21 15:29:45 / 个人分类:其他
1.文件分为文本文件和二进制文件﹐不过本质都一样﹐都是些01。51Testing软件测试网+z+ms)A_8T'K
*BB/D9XkZsm02.计算机存储设备存储的0或1﹐称为计算机的一个二进制位(bit)。
tp)E/KX \0M[2O.D:A051Testing软件测试网Y D7Z7{C S)h3.二进制文件的0和1有专门的应用程序来读﹐所以它们没有什么乱不乱码的问题﹐只要该程序认得就行。(像doc,xls,exe,dll等)
`&gF6Z-q4k0AyH1N1Ilhhp/L04.文本文件就不一样了﹐notepad要认识它﹐vs.net要认识它,UE也要认识它...所以它们就要有一个标准。这个标准的原理其实很简单﹐就是把所有的字符都给它一个序号﹐然后根据这个序号来找字符就可以了。这个东东就是编码表,也叫字符集(charset)。51Testing软件测试网 N.WQ I{
51Testing软件测试网| t;Y:bD/~;crF Tj5.文本文件存的都是字符﹐如﹕A,?,@,x。很明显一个bit不能表示﹐刚好计算机的存储单位--字节(byte)就是多个字节(1个byte=8个bit),因此用byte来表示字符就理所当然了。51Testing软件测试网$L*Y:Qe#e:g_`
51Testing软件测试网.Z;Ql6thW ~&Tj6.第一个编码表--ASCII码很快产生﹐很简单﹐就是用一个byte来表示一个字符(最高位置0),总共能存储128(2^8)个字符。如A用 65表示﹐存在计算机中就是01000001(65)﹐为了书写方便﹐我们一般记作0x41(16进制),97则表示小写的a,存在计算机中就是 01100001(97)﹐记作0x61。?用63表示,记作0x3F。51Testing软件测试网 ^G)Z?Y
51Testing软件测试网e-}aYAk9tM s7.英语国家的大小写字母加起来才52个字符﹐再加上数字﹐符号和一些特殊字符﹐已经足够使用。所以ASCII刚开始非常流行(谁叫计算机不是咱中国发明的... )51Testing软件测试网_m)uG`.B]1gSM1HK
51Testing软件测试网B4I"|_5|;^#_W8.随着计算机的普及﹐当非英语系的国家开始使用时﹐ASCII已经明显不能满足了(总不成天天使用xiao sheng来表示"小生"吧),所以这些国家(地区)就开始制订自己的标准。51Testing软件测试网omaY9OST%[1c
51Testing软件测试网*M,^R,p hfz'Q{*k9.中国大陆制订了简体汉字的字符集(GB2312)。和英语国家不同﹐我们的汉字远远不止128个﹐所以一个byte肯定不能表示完﹐那就多加个 byte,16位(65536)总可以了吧。不过这样虽解决了位数不够的问题﹐但是原来的英文文件怎么办?总不成又全部拿出来改成双字节吧。幸好﹐居然发现原来的ASCII的第一位居然是0﹐那我们把第1位改成1不就OK了吗?以后凡看到0开头的就读1个字节﹐1开头的就读2个字节。(而且128*128 表示所有的简体字也足够了)51Testing软件测试网"?{C\&Y D;i [;a
n;G"`"N8n0tr%W010.因此在GB2312标准中,"小"的序号是0xD0A1,表示成11010000 10100001,而A还是表示成01000001,这就是为什么简体操作系统读ASCII文件不会乱码﹐而反之则不然的原因。51Testing软件测试网W D1}+UCA
U9nV\,}f#}5Ob^011.目前来说﹐情况还比较好﹐中国大陆的计算机运行正常。
AC w0o1\#G]0v9Y$S}S?k8?W%I(Q012.看到中国大陆制订了一个标准﹐其它国家和地区也不甘示弱﹐纷纷亮出自己的字符集,于是乎什么BIG5(中国台湾),shift_jis(日本),ks_c_5601-1987(韩国)都闪亮登场﹐一时间百鸟争鸣,百花齐放。51Testing软件测试网7~"P&p.fy u^E9B
ML!M.j:v|Z'i013.每个国家都想与ASCII保持兼容﹐理所当然﹐后面的字符就完全不一样了﹐因此﹐同样的0xD0A1,在GB2312中是"小"字﹐而在BIG5中却是"苤"字。你想想﹐这样不乱才怪。51Testing软件测试网.O%m M*{xZ1N)M
51Testing软件测试网5}%D%N2guO14.到了这时候﹐总有人会想到﹐再这样继续下去是肯定不行的﹐于是它们就想到了﹐如果有一个标准﹐能包括所有字符那不就OK了吗?51Testing软件测试网2nP8pl fw}TK
;Sep$j EBOn5D9P015.于是"大哥大"标准就出来了﹐这就是unicode,为了能够足够表示世界上的所有字符这样光荣而又伟大的任务﹐这家伙用了四个字节来表示 (2的32次方到底是多少﹐我也懒得算了),这下好了﹐天下太平了﹐再也不会有麻烦了﹐耳根清静了...(打住﹐你小子这么这么罗嗦呀)51Testing软件测试网 w4S6Wj|L#n(i x