算命ANSI、UNICODE、UTF-8、GB2312、GBK、DBCS、UCS的界别与由来。

当自己沉醉于西藏底实践的美时,我也遗忘了大之大庆。
妈妈悄悄的通话来报告自己,要自己今晚打电话回来问候。
嗳,我实在该特别。
亲友等送了花炮之类的,父亲不敢放开,母亲证明天上会去于父亲算命,看会扩不。
我亲如手足的二老,我欠怎么惩罚也?
你们的儿早已长大成人,可你们还要吗他的建业更加辛苦之做事,我该怎么处置什么!
儿子已经不是那时听说的儿子,他贼头贼脑的骑自行车去了西藏,你们一定会说他发疯了底,所以直接未敢告你们。
请求老人原谅儿子之不孝,春节即令以外流浪,暑假到了成都啊未尝回家来瞧,可是你们不晓得,儿子心里啊很为难给,不流动浪我不清楚生活的意义当哪。回到家当你们沧桑的脸庞,面对家徒四壁的小,实在是内疚父母亲啊! 

广一下,自己呢读一下~

 

   
一直本着字符的各种编码方式懵懵懂懂,什么ANSI、UNICODE、UTF-8、GB2312、GBK、DBCS、UCS……是勿是圈之百般晕,假如你细的阅读本文乃肯定得清楚的懂得他们。Let’s
go!
          
   
很遥远很久以前,有一样群人数,他们操纵用8独好开合的结晶管来构成成不同的状态,以代表世界上之万物。他们看8只开关状态是好的,于是他们拿这名叫”字节约”。 
   
再后来,他们又做了一些方可处理这些字节的机,机器开动了,可以据此字节来整合产生多状态,状态开始变来变去。他们观看这般是好之,于是它就是即刻机器称为”计算机”。
   
开始计算机只当美国就此。八各之字节一共可以结合产生256(2的8次方)种不同之状态。 
   
他们将内部的数码从0开始的32种状态分别规定了独特的用,一不过终端、打印机遇上预定好的这些字节被染过来时,就使做一些预约的动作。遇上00×10,
终端就换行,遇上0x07, 终端就朝人们嘟嘟叫,例如遇上0x1b,
打印机就打印反白的许,或者极端就因故彩色显示字母。他们观看这样非常好,于是就将这些0x20之下的字节状态叫做”控制码”。 
   
他们还要管装有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127哀号,这样计算机就好为此不同字节来存储英语的契了。大家看来这样,都深感好好,于是大家都将这个方案叫做
ANSI 的”Ascii”编码(American Standard Code for Information
Interchange,美国音交互换标准代码)。当时世界上装有的计算机都因此相同的ASCII方案来保存英文字。 
          
   
后来,就像打巴比伦塔一律,世界各地的且从头运用计算机,但是不少国家之所以之匪是英文,他们的字母里有过多是ASCII里没有底,为了好于电脑保存他们的仿,他们操纵下127如泣如诉过后的空位来代表这些新的字母、符号,还加入了许多描绘表格时要为此生及的横线、竖线、交叉等形象,一直把序号编到了最后一个态255。从128届255当即无异于页的字符集被称”扩展字符集”。从此之后,贪婪之人类还无新的状态可以据此了,美帝国主义可能没想到还有第三世界国家的众人为想得以就此到电脑吧!

   
等中华人们获取计算机时,已经没可以采用的字节状态来表示汉字,况且有6000几近只常因此汉字需要保留也。但是及时难休倒智慧之炎黄全员,我们不客气地把那些127号以后的奇异符号们直接取消掉, 
   
规定:一个低于127底字符的义与本平,但少独超过127的字符连在一起时,就意味着一个中国字,前面的一个字节(他称为高字节)从0xA1因此到
0xF7,后面一个字节(低字节)从0xA1交0xFE,这样我们就是可做出约7000几近个简体汉字了。在这些编码里,我们还将数学符号、罗马希腊之字母、日文的字母们还编上了,连以
ASCII
里当就是部分数字、标点、字母都全重新编了片只字节长的编码,这就算是常常说之”全角”字符,而原来在127号以下的那些即使深受”半角”字符了。 
      中国百姓看看这样非常正确,于是就将这种汉字方案叫做 “GB2312″。GB2312
是对 ASCII 的国语扩展。 
     
但是中国底字太多了,我们飞速即即意识产生为数不少人口之人名没有章程在此地从出来,特别是少数老会烦别人的国领导人。于是我们不得不连续将
GB2312 没有使的码位找出来老实不虚心地用上。 
     
后来或不够用,于是干脆不再要求低字节一定是127号随后的内码,只要第一单字节是过量127就定位表示即是一个中国字的开始,不管后面与的是匪是扩大字符集里的内容。结果扩展之后的编码方案被名
GBK 标准,GBK 包括了 GB2312
的享有情节,同时又多了贴近20000单新的方块字(包括繁体字)和标记。 
     
后来少数民族也要是因此计算机了,于是我们又扩充,又加以了几千独新的少数民族的字,GBK
扩成了GB18030。从此以后,中华民族的文化就是可以于电脑时代中承受了。 
      中国之程序员们顾就同一名目繁多汉字编码的业内是好之,于是通称他们叫做
“DBCS”(Double Byte Charecter Set
双配节字符集)。在DBCS系列专业里,最老之表征是少许节长的汉字字符和千篇一律配节长的英文字符并存于跟同效编码方案里,因此他们写的次第为支持中文处理,必须要专注字串里之各级一个字节的价值,如果此价值是过127之,那么即便以为一个双字节字符集里的字符出现了。那时候是受了加持,会编程的电脑僧侣们还设每天念下面是咒语数百尽:

      “一个中国字毕竟少只英文字符!一个字毕竟少独英文字符……”
          
     
因为就各个国家都像中国如此折腾来同模仿好的编码标准,结果相互之间孰呢非理解谁之编码,谁吧无支持别人的编码,连大陆与台湾这样才相隔了150海里,使用在一样栽语言的兄弟地区,也各自使用了不同之
DBCS
编码方案——当时之华夏人纪念让电脑显示汉字,就必作及一个”汉字系统”,专门为此来拍卖汉字的亮、输入的问题,但是那个台湾的无知封建人士形容的算命程序就算必须加装另一样仿支持
BIG5
编码的哟”倚天汉字系统”才方可就此,装错了字符系统,显示就会见乱了模拟!这怎么收拾?而且世界民族之林中还有那些一时于是非达标电脑的老少边穷百姓,他们的文又怎么收拾?

      真是计算机的巴比伦塔命题啊! 
      正于这,大天使加百列及时出现了——一个为
ISO(国际标谁化组织)的国际组织决定下手解决者问题。他们以的方法很简单:废了拥有的地区性编码方案,重新施一个囊括了球上有着知识、所有字母和标记的编码!他们打算于其”Universal
Multiple-Octet Coded Character Set”,简称 UCS, 俗称 “UNICODE”。 
      UNICODE
开始制定时,计算机的存储器容量极大地前进了,空间重为未成为问题了。于是
ISO
就直接确定须用有限只字节,也就是16各项来统一意味着所有的字符,对于ascii里的那些“半竞”字符,UNICODE
包持其原编码不变换,只是将其尺寸由原来的8位扩展为16位,而另知识和语言的字符则通更联合编码。由于”半交锋”英文符号只待用到低8各,所以该高
8个永远是0,因此这种大气的方案在保留英文文本时会见多浪费一加倍的半空中。

     
这时候,从老社会里活动过来的程序员开始发现一个意料之外之场面:他们的strlen函数靠不停歇了,一个汉字不再是一定给片独字符了,而是一个!是的,从
UNICODE
开始,无论是半角的英文字母,还是全角的汉字,它们还是联合之”一个字符”!同时,也还是联的”两个字节”,请留意”字符”和”字节约”两单术语的两样,“字节约”是一个8员的情理存贮单元,而“字符”则是一个文化相关的记号。在UNICODE
中,一个字符就是少数只字节。一个中国字毕竟少独英文字符的一世就急匆匆过去了。 
          
     
从前多字符集存在时时,那些做多语言软件之公司受上过十分怪累,他们以在不同的国销售一律仿软件,就不得不以区域化软件时也加持那个双字节字符集咒语,不仅要处处小心不要搞错,还要将软件中的文在不同之字符集中转来改变去。UNICODE
对于他们吧是一个异常好之通盘解决方案,于是起 Windows NT 开始,MS
趁机把其的操作系统改了平等整整,把有的为主代码都转化了用 UNICODE
方式工作的本,从这起,WINDOWS
系统终于任需要加装各种本土语言系统,就好显示全世界上有所知识之字符了。 
    但是,UNICODE
在制定时从没设想和另外一样种植现有的编码方案保持兼容,这使得 GBK 与UNICODE
在汉字的内码编排上了是免同等的,没有同种简单的算术方法好拿公文内容由UNICODE编码和其它一样种植编码进行更换,这种转移必须经过查表来进展。 
    如前所述,UNICODE
是用少个字节来代表也一个字符,他一起可构成出65535异之字符,这大概已经得以覆盖世界上具有知识之标记。如果还不够呢从没涉及,ISO已经准备了UCS-4方案,说简练了就是是四独字节来表示一个字符,这样咱们虽可以组成产生21亿个不等的字符出来(最高位产生任何用途),这大概可以为此到银河联邦成立那无异龙吧!
    UNICODE 来到时,一起来到的还有计算机网络的起来,UNICODE
如何当网络及传也是一个得考虑的题材,于是面向传输的不在少数 UTF(UCS
Transfer
Format)标准出现了,顾名思义,UTF8就是历次8只各类传输数据,而UTF16不怕是每次16独号,只不过为了传输时之可靠性,从UNICODE到
UTF时连无是直接的应和,而是只要过局部算法和规则来换。

   
受到过网编程加持的微机僧侣们都掌握,在网络里传递信息时有一个不胜关键的题材,就是对数据高低位的解读道,一些电脑是应用低先发送的办法,例如我们PC机采用的
INTEL
架构,而其余一对凡运用高位先发送的法门,在网被交换数据经常,为了审批双方对于高低位的认识是否是如出一辙的,采用了一致栽颇省心的道,就是当文本流的开端时为对方发送一个标志符——如果以后的文件是高位在位,那就是发送”FEFF”,反之,则发送”FFFE”。不信教而可就此二进制方式打开一个UTF-X格式的文件,看看开头两只字节是不是这有限独字节?
    讲到这边,我们重顺便说说一个异常红的意外景象:当你在 windows
的记事本里新建一个文件,输入”联通”两独字后,保存,关闭,然后重新打开,你见面发觉立即有限单字就没有了,代之的凡几乎独乱码!呵呵,有人说这就是联通之所以拼不过移动的因由。

    其实这是坐GB2312编码和UTF8编码产生了编码冲撞的由来。 
    从网上引来一段于UNICODE到UTF8的转换规则:
        Unicode 
        UTF-8
        0000 – 007F 
        0xxxxxxx
        0080 – 07FF 
        110xxxxx 10xxxxxx
        0800 – FFFF 
        1110xxxx 10xxxxxx 10xxxxxx
   
例如”汉”字的Unicode编码是6C49。6C49于0800-FFFF之间,所以要就此3字节模板:1110xxxx
10xxxxxx 10xxxxxx。将6C49形容成二进制是:0110 1100 0100
1001,将以此于特流按三字节模板的子方法分为0110 110001
001001,依次代替模板被之x,得到:1110-0110 10-110001 10-001001,即E6 B1
89,这就是该UTF8的编码。 
   
而当你新建一个文书文件时,记事本的编码默认是ANSI,如果你以ANSI的编码输入汉字,那么他实在就是是GB系列的编码方式,在这种编码下,”联通”的内码是: 
            c1 1100 0001 
            aa 1010 1010 
            cd 1100 1101 
            a8 1010 1000 
          
   
注意到了吗?第一次之独字节、第三季个字节的苗子部分的都是”110″和”10″,正好跟UTF8规则里的两字节模板是一样的,于是再次打开记事本时,记事本就误认为这是一个UTF8编码的文书,让我们将第一独字节的110同次独字节的10错过丢,我们虽取得了”00001
101010″,再将各位对一起,补上带的0,就获得了”0000 0000 0110
1010″,不好意思,这是UNICODE的006A,也就算是略写的假名”j”,而从此的点滴许节用UTF8解码之后是0368,这个字符什么呢未是。这即是只有”联通”两只字之文书并未法于记事本里正常显示的原由。

   
而而你当”联通”之后多输入几个字,其他的许的编码不见得而凑巧是110以及10始发之字节,这样更打开时,记事本就无见面坚持这是一个utf8编码的公文,而会因此ANSI的法门解读的,这时乱码又非出现了。
          
   
好了,终于得以回复NICO的题目了,在数据库里,有n前缀的字串类型就是UNICODE类型,这种类型中,固定用单薄单字节来表示一个字符,无论这字符是汉字还是英文字母,或是别的什么。

   
如果您若测试”abc汉字”这个串的长短,在无n前缀的数据类型里,这个字串是7独字符的长短,因为一个中国字相当给简单单字符。而在发生n前缀的数据类型里,同样的测试串长的函数将会报告你是5个字符,因为一个字就是是一个字符。

from:http://blog.csdn.net/lijie_sh/archive/2009/07/31/4396872.aspx

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图