Unicode 和 UTF-8 有何区别

  很漫长很久以前,有同样居多人数,他们控制就此8独好开合的结晶管来整合成不同之状态,以表示世界上的万物。他们视8只开关状态是好的,于是他们拿当时称为”字节约”。

颇漫长很久以前,有同一博人,他们说了算就此8单可开合的结晶管来做成不同之状态,以象征世界上的万物。他们见到8个开关状态是好的,于是他们将当时叫”字节“。再后来,他们而举行了有的得以处理这些字节的机械,机器开动了,可以为此字节来构成有过多态,状态开始变来变去。他们看来这样是好之,于是她就应声机器称为”计算机“。

  再后来,他们还要召开了片得以处理这些字节的机械,机器开动了,可以就此字节来做产生过多状态,状态开始变来变去。他们视这么是好之,于是她就是随即机器称为”计算机”。

 

  开始计算机只在美国因此。八各类的字节一共可以做有256(2底8次方)种不同之状态。

始发计算机只于美国为此。八位的字节一共可以组成产生256(2的8次方)种不同的状态。
他俩管中的数码从0开始之32种状态分别规定了不同寻常之用处,一可顶、打印机遇上约定好的这些字节被污染过来时,就使举行有约定的动作:

  他们将里面的数码从0开始之32种植状态分别规定了奇之用途,一可是极、打印机遇上约定好的这些字节被传过来时,就如开片预定的动作。遇上00×10,
终端就换行,遇上0x07, 终端就朝着众人嘟嘟叫,例如遇上0x1b,
打印机就打印反白的配,或者极端就就此彩色显示字母。他们看这般大好,于是便拿这些0x20以下的字节状态叫做”控制码”.

遭遇上0×10, 终端就换行;

  他们同时管持有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127哀号,这样计算机就可为此不同字节来存储英语的契了。大家
看到这样,都深感蛮好,于是大家都将此方案叫做 ANSI
的”Ascii”编码(American Standard Code for Information
Interchange,美国信交互换标准代码)。当时世界上保有的计算机都为此同的ASCII方案来保存英文字。

未遭上0×07, 终端就朝着人们嘟嘟叫;

 

遭受上0x1b, 打印机就打印反白的配,或者极端就就此彩色显示字母。

  后来,就比如打巴比伦塔平,世界各地的还从头运用电脑,但是不少国为此底未是英文,他们之字母里发生成百上千凡是ASCII里没有底,为了好于电脑保存他
们的文,他们操纵下127声泪俱下过后的空位来代表这些新的字母、符号,还加入了森描绘表格时欲因此生到的横线、竖线、交叉等造型,一直将序号编到了最后一
个状态255。从128到255即时等同页的字符集被称”扩展字符集”。从此后,贪婪之人类还没新的状态可以据此了,美帝国主义可能没有想到还有第三世界国
家的众人呢意在得以就此到电脑吧!

她们视这么十分好,于是就管这些0×20之下的字节状态称为”控制码”。他们而把富有的拖欠
封锁、标点符号、数字、大小写字母分别就此连续的字节状态表示,一直编到了第127哀号,这样计算机就得为此不同字节来囤积英语的契了。大家看到这般,都深感
万分好,于是大家都将此方案叫做 ANSI 的”Ascii”编码(American Standard
Code for Information
Interchange,美国消息相互换标准代码)。当时世界上存有的处理器都因此相同的ASCII方案来保存英文字。

  等中华人们得到计算机时,已经远非可以采用的字节状态来代表汉字,况且有6000差不多单常因此汉字需要保留也。但是及时难不倒智慧的中国全员,我们不客气地拿那些127号以后的奇异符号们直收回掉,

 

  规定:一个仅次于127的字符的意义和原一样,但简单只高于127底字符连在一起时,就代表一个汉字,前面的一个字节(他称高字节)从0xA1就此到
0xF7,后面一个字节(低字节)从0xA1届0xFE,这样咱们就算好组成产生大约7000差不多独简体汉字了。在这些编码里,我们尚把数学符号、罗马希腊的
字母、日文的假名们都编上了,连当 ASCII
里当就一些数字、标点、字母都全重新编了点滴单字节长的编码,这虽是时常说的”全角”字符,而本来在127如泣如诉以下的那些不畏受”半交锋”字符了。

新兴,就像打巴比伦塔扳平,世界各地都起下计算机,但是过多国家之所以之非是英文,他们之假名里发出好多是ASCII里没有的,为了好以处理器保存他们之契,他们决定采用
127如泣如诉以后的空位来代表这些新的字母、符号,还加入了成千上万画表格时要用生至的横线、竖线、交叉等相,一直拿序号编到了最后一个状态255。从128
到255即同样页的字符集被称”扩大字符集“。从此之后,贪婪之人类还无初的状态可以为此了,美帝国主义可能没想到还有第三世界国家之人们为盼可以用到计算机吧!

  中国人民看到如此大不利,于是便拿这种汉字方案叫做 “GB2312″。GB2312
是针对 ASCII 的华语扩展.

 

  但是中国之方块字太多了,我们迅速便即意识发许多人数的真名没有办法在这边打出去,特别是一些老会烦别人的国度领导人。于是我们只好连续将
GB2312 没有用的码位找出来老实不客气地用上。

等于中华人们得到计算机时,已经没好使的字节状态来表示汉字,况且有6000几近个常因此汉字需要保留也。但是及时难不倒智慧之中原百姓,我们不客气地管那些127声泪俱下随后的奇异符号们直接取消掉,
规定:一个低于127之字符的意义和原来平,但简单只盖127底字符连在一起时,就代表一个汉字,前面的一个字节(他号称高字节)从0xA1就此到0xF7,后面一个字节(低字节)从0xA1到0xFE,这样咱们就算可以组成产生大约7000差不多独简体汉字了。在这些编码里,我们尚拿数学符号、罗马希腊的字母、日文的假名们都编上了,连当
ASCII
里当就是有些数字、标点、字母都均重新编了点滴单字节长的编码,这虽是时常说的”全角”字符,而本来在127如泣如诉以下的那些不畏受”半斗”字符了。中国布衣看到这样很不错,于是便将这种汉字方案叫做
GB2312“。GB2312 是指向 ASCII 的中文扩展。

  后来要不够用,于是干脆不再要求小字节一定是127哀号之后的内码,只要第一个字节是大于127纵稳定表示这是一个字的上马,不管后面与的是勿是扩大字
符集里的情。结果扩展之后的编码方案被誉为 GBK 标准,GBK 包括了 GB2312
的有情节,同时以增了邻近20000独新的字(包括繁体字)和记。

 

  后来少数民族也要为此计算机了,于是我们重扩展,又加了几千个新的少数民族的字,GBK
扩成了GB18030。从此以后,中华民族之知就得当微机时代中承受了。

不过中国的汉字太多了,我们快就不怕意识发广大总人口之全名没有办法在这里从出来,特别是一些老会烦人家的国度领导人。于是我们不得不连续将GB2312
没有使用的码位找出来老实不虚心地用上。后来或者不够用,于是干脆不再要求没有字节一定是127哀号后的内码,只要第一只字节是超越127就算稳表示这是一个汉字之始发,不管后面和的凡不是扩大字
符集里之情。结果扩展之后的编码方案被称之为 GBK 标准,GBK包括了GB2312
的富有内容,同时还要添了临20000个新的汉字(包括繁体字)和标记。
后来少数民族也只要用微机了,于是我们重扩展,又加了几千个新的少数民族的配,GBK扩成了
GB18030。从此以后,中华民族之知识就可以以处理器时代中传承了。
中国底程序员们看到这等同层层汉字编码的正式是好的,于是通称他们叫做
DBCS“(Double Byte Charecter Set
双配节字符集)。在DBCS系列专业里,最老的表征是个别许节长的方块字字符和千篇一律配节长的英文字符并存于跟同效编码方案里,因此他们写的次第为支持中文处理,必须要专注字串里之各级一个字节的值,如果这个价值是超过127之,那么即便以为一个双字节字符集里的字符出现了。那时候是受了加持,会编程的计算机僧侣们还如每天念下面是咒语数百全方位:
“一个字毕竟少独英文字符!一个汉字毕竟少个英文字符……”

  中国之程序员们看来这同样多重汉字编码的科班是好的,于是通称他们叫做
“DBCS”(Double Byte Charecter Set
双许节字符集)。在DBCS系列标准里,最特别之特征是少数字节长的汉字字符和同一许节长的英文字符并存于与同效仿编码方案里,因此他们写的顺序为支持中文处
理,必须使留心字串里的各国一个字节的价,如果是价是出乎127底,那么即使认为一个双字节字符集里之字符出现了。那时候是被过加持,会编程的微处理器僧侣
们都使每天念下面这个咒语数百任何:

 

 

盖就相继国家还如中华这么折腾来同样拟自己之编码标准,结果相互之间孰吧无清楚谁之编码,谁啊未支持别人的编码,连大陆与台湾如此只是隔了150海里,使用正在雷同种植语言的兄弟地区,也独家采用了不同的
DBCS
编码方案——当时底中国口感念为电脑显示汉字,就务须装上一个”汉字系统”,专门就此来处理汉字之亮、输入的题材,像是杀台湾之愚昧封建人士形容的算命程序即使不能不加装另一样仿照支持
BIG5
编码的呀”倚天汉字系统”才堪用,装错了字符系统,显示就会乱了套!这怎么惩罚?而且世界民族之林中还有那些一时所以无齐电脑的特困百姓,他们之契以岂处置?
真是计算机的巴比伦塔命题啊!

  ”一个汉字毕竟少单英文字符!一个中国字毕竟少只英文字符……”

 

  因为马上逐一国家都像中华这样搞来同样模拟好的编码标准,结果相互之间孰也未亮谁的编码,谁吗非支持别人的编码,连大陆和台湾如此光相隔了150海里,使用
着同一种植语言的哥们地区,也分头下了不同之 DBCS
编码方案——当时底神州总人口怀念被电脑显示汉字,就亟须作及一个”汉字系统”,专门就此来拍卖汉字的来得、输入的题材,但是很台湾之无知封建人士形容的算命程序
就必加装另一样法支持 BIG5 
编码的什么”倚天汉字系统”才好据此,装错了字符系统,显示就会乱了拟!这怎么惩罚?而且世界民族之林中还有那些一时所以无达电脑的贫百姓,他们的字又岂
么办?

巧以这,大天使加百列及时出现了——一个叫
ISO(国际标谁化组织)的国际组织决定下手解决这个题材。他们利用的主意充分简短:废了有的地区性编码方案,重新弄一个概括了地球上独具知识、所有字母和符号
的编码!他们打算为她”Universal Multiple-Octet Coded Character Set”,简称
UCS, 俗称 “unicode“。

 

 

  真是计算机的巴比伦塔命题啊!

unicode开始制订时,计算机的存储器容量极大地前进了,空间重为无化问题了。于是
ISO
尽管直接规定必须用单薄只字节,也就是16各类来归并意味着有的字符,对于ASCII里之那些“半比”字符,unicode包持该原编码不转换,只是将那个长度由本的8员扩展为16位,而另知识及言语的字符则整个重联合编码。由于”半竞技”英文符号只待用到低8各项,所以其高8各永远是0,因此这种大气的方案在保留英文文本时见面多浪费一加倍的空间。

  正于这,大天使加百列及时出现了——一个给
ISO(国际标谁化组织)的国际团队决定下手解决之题目。他们运用的法好粗略:废了富有的地区性编码方案,重新将一个囊括了地上具有知识、所有字母
和标志的编码!他们打算给它们”Universal Multiple-Octet Coded Character
Set”,简称 UCS, 俗称 “UNICODE”。

 

  UNICODE
开始制订时,计算机的存储器容量极大地提高了,空间又为不化问题了。于是
ISO
就径直规定要用半独字节,也即是16号来统一意味着拥有的字符,对于ascii里的那些“半竞赛”字符,UNICODE
包持其原编码不更换,只是以其长度由原的8个扩展为16个,而别知识和语言的字符则全部更联合编码。由于”半斗”英文符号只需要为此到低8各类,所以该高
8各类永远是0,因此这种大气的方案于保留英文文本时会见多浪费一倍的空中。

这,从旧社会里走过来的程序员开始意识一个奇怪之景象:他们的 strlen
函数靠不停止了,一个汉字不再是相当给片独字符了,而是一个!是的,从unicode开始,无论是半角的英文字母,还是全角的汉字,它们都是联合之”一个字符“!同时,也都是合之”个别单字节“,请留心”字符”和”字节约”两独术语的不等,“字节”是一个8各类的大体存贮单元,而“字符”则是一个文化有关的标记。在unicode中,一个字符就是鲜只字节。一个中国字毕竟少只英文字符的一世都急匆匆过去了。

  这时候,从老社会里走过来的程序员开始发现一个想不到之观:他们之strlen函数靠不停止了,一个汉字不再是一定给个别只字符了,而是一个!是的,从
UNICODE
开始,无论是半角的英文字母,还是全角的汉字,它们还是统一的”一个字符”!同时,也都是联的”两独字节”,请留意”字符”和”字节约”两单术语的非
同,“字节约”是一个8员之情理存贮单元,而“字符”则是一个文化有关的标记。在UNICODE
中,一个字符就是鲜单字节。一个中国字毕竟少只英文字符的时日就急匆匆过去了。

 

 

unicode同为不健全,这里就是出星星点点只的题材,一个凡,如何才能够分别unicode和ascii?计算机怎么知道老三个字节表示一个记,而未是个别代表三只标志为?第二独问题是,我们曾知晓,英文字母只所以一个字节表示虽足够了,如果unicode统一规定,每个符号用三只或四只字节表示,那么每个英文字母前还一定产生次暨三个字节是0,这对于仓储空间吧是特大的荒废,文本文件的深浅会为此大出二三加倍,这是难承受之。

  从前多字符集存在时时,那些做多语言软件之商家受到上过怪怪累,他们以在不同之国销售一律模仿软件,就不得不以区域化软件时也加持那个双字节字符集咒
语,不仅要处处小心不要搞错,还要管软件中的文在不同之字符集中转来改变去。UNICODE
对于他们吧是一个异常好之无微不至解决方案,于是从 Windows NT 开始,MS
趁机将它们的操作系统改了平等遍,把有的中心代码都转化了于是 UNICODE
方式工作的版,从此刻起,WINDOWS
系统终于任需要加装各种本土语言体系,就可以显得全世界上具备知识的字符了。

 

  但是,UNICODE
在制订时没有考虑同外一样栽现有的编码方案保持兼容,这让 GBK 与UNICODE
在汉字的内码编排上全是匪均等的,没有一样种植简单的算术方法可以将公文内容由UNICODE编码和外一样栽编码进行换,这种转移必须透过查表来拓展。

unicode以挺丰富一段时间内无法放开,直到互联网的面世,为缓解unicode如何在网达到传的问题,于是面向传输的居多
UTF(UCS Transfer
Format)标准出现了,顾名思义,UTF-8不畏每次8单各传输数据,而UTF-16就是每次16单号。UTF-8就是在互联网及行使最广的一致种植unicode的贯彻方式,这是吗传输而规划之编码,并要编码无国界,这样就得显得全世界上存有知识的字符了。UTF-8最可怜之一个表征,就是它们是如出一辙种植变长的编码方式。它好应用1~4只字节表示一个符号,根据不同的记而变化字节长度,当字符在ASCII码的克时,就因此一个字节表示,保留了ASCII字符一个字节的编码做啊她的等同有的,注意的凡unicode一个中文字符占2个字节,而UTF-8一个汉语字符占3单字节)。从unicode到uft-8并无是一直的照应,而是只要过局部算法和规则来更换。

  如前所述,UNICODE
是因此半单字节来代表也一个字符,他累计可做有65535见仁见智之字符,这大概都好挂世界上有知识的记号。如果还不够啊尚无关联,ISO已经准备
了UCS-4方案,说简单了就是四个字节来表示一个字符,这样我们不怕可整合出21亿只例外之字符出来(最高位有其它用途),这大概可以用到银河联邦成立
那无异上吧!

 

  UNICODE 到时,一起到的还有计算机网络的起,UNICODE
如何当网达到传也是一个亟须考虑的题材,于是面向传输的不在少数 UTF(UCS
Transfer
Format)标准出现了,顾名思义,UTF8就是历次8独号传输数据,而UTF16虽是历次16单各,只不过为了传输时之可靠性,从UNICODE到
UTF时并无是直接的对应,而是一旦了有算法和规则来更换。

Unicode符号范围 | UTF-8编码方式

  受到过网络编程加持的电脑僧侣们还晓得,在网络里传递信息时发一个怪重点之题材,就是于数据高低位的解读道,一些处理器是使低先发送的不二法门,例
如我们PC机采用的 INTEL
架构,而另外一对凡使用高位先发送的办法,在网被交换数据经常,为了审批双方对高低位的认识是否是平的,采用了千篇一律种很便捷的法,就是在文本流的始发时
向对方发送一个标志符——如果后的公文是高位在位,那就发送”FEFF”,反之,则发送”FFFE”。不信仰而得就此二进制方式打开一个UTF-X格式的
文件,看看开头两只字节是匪是即时点儿个字节?

(十六进制) | (二进制)
—————————————————————–
0000 0000-0000 007F | 0xxxxxxx

  说到此地,我们重新顺便说说一个格外有名的竟现象:当你当 windows
的记事本里新建一个文本,输入”联通”两单字后,保存,关闭,然后还打开,你见面发觉这有限单字已经没有了,代的的凡几乎独乱码!呵呵,有人说立刻即是联通之所以拼不过移动的原故。

0000 0080-0000 07FF | 110xxxxx 10xxxxxx

  其实就是因GB2312编码和UTF8编码产生了编码冲撞的因由。

0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx

  从网上引来一截于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,这个字符什么为不是。这虽
是只有”联通”两独字之公文没有章程在记事本里正常显示的缘故。

0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

   
而如您以”联通”之后多输入几单字,其他的字的编码不见得而正好是110以及10始发之字节,这样更打开时,记事本就不会见坚持就是一个utf8编码的文本,而会为此ANSI的主意解读的,这时乱码又不出新了。
         
   
好了,终于可以应对NICO的题材了,在数据库里,有n前缀的字串类型就是UNICODE类型,这种类型中,固定用少独字节来表示一个字符,无论这字符是汉字还是英文字母,或是别的什么。

 

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

最终简短总结一下:

  • 华全民经过对 ASCII 编码的国语扩充改造,产生了 GB2312
    编码,可以代表6000大多单常因此汉字。
  • 汉字实在是太多矣,包括繁体和各种字符,于是有了 GBK 编码,它概括了
    GB2312 中之编码,同时扩大了众。
  • 中华凡是单多民族国家,各个民族几乎都发生投机独立的语言系统,为了表示那些字符,继续将
    GBK 编码扩充为 GB18030 编码。
  • 每个国家还如中国同一,把温馨之言语编码,于是起了五花八门的编码,如果您莫装相应的编码,就无法解释相应编码想表达的情。
  • 毕竟,有只叫 ISO 的团队看不下去了。他们同台创造了相同种植编码 UNICODE
    ,这种编码非常很,大至得包容世界上另一个文及标志。所以若电脑及发生
    UNICODE
    这种编码系统,无论是全球哪种文字,只需要保留文件之时段,保存成
    UNICODE 编码就可让另外计算机正常分解。
  • UNICODE 于网传输中,出现了少于个正规 UTF-8 和 UTF-16,分别每次传输
    8只号与 16只号。于是便会有人有疑问,UTF-8
    既然能够保留那么基本上言、符号,为什么国内还有这么多使用 GBK
    等编码的人头?因为 UTF-8
    等编码体积比充分,占电脑空间比较多,如果面向的应用人群绝大部分且是神州人,用
    GBK 等编码为得。

 

来源网络,出处实在心有余而力不足考证,无法署名,有剔修改,如发生侵权请直接关系。

或许的原文:unicode,ansi,utf-8,unicode big
endian编码的分,网页编码就是那么点事

简单来说:

  • Unicode 是「字符集」
  • UTF-8 是「编码规则」

其中:

  • 字符集:为各个一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code
    Point)
  • 编码规则:将「码位」转换为字节序列的规则(编码/解码 可以清楚吧
    加密/解密 的进程)

 

广义的 Unicode 是一个正规,定义了一个字符集及同文山会海的编码规则,即
Unicode 字符集和 UTF-8、UTF-16、UTF-32 等等编码……

Unicode 字符集为每一个字符分配一个码位,例如「知」的码位是 30693,记作
U+77E5(30693 的十六进制为 0x77E5)。

UTF-8 顾名思义,是同样模拟为 8
位为一个编码单位之只是变长编码。会拿一个码位编码为 1 到 4 个字节:

U+ 0000 ~ U+ 007F: 0XXXXXXX
U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX

冲达表中之编码规则,之前的「知」字的码位 U+77E5 属于第三行之限定:

       7    7    E    5    
    0111 0111 1110 0101    二进制的 77E5
--------------------------
    0111   011111   100101 二进制的 77E5
1110XXXX 10XXXXXX 10XXXXXX 模版(上表第三行)
11100111 10011111 10100101 代入模版
   E   7    9   F    A   5

当下即是用 U+77E5 本 UTF-8 编码为字节序列 E79FA5 的经过。反之亦然。

发表评论

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

网站地图xml地图