UTF-8 到底是什麼意思?unicode編碼簡介 - 熱知網

文章推薦指數: 80 %
投票人數:10人

UTF-8 到底是什麼意思?unicode編碼簡介 ... 在電腦上處理文字的時候,你可能經常接觸到一個名詞,叫UTF-8。

... 你會不會覺得一絲疑惑,這到底是什麼東西? 您當前的位置:首頁 > 曲藝UTF-8到底是什麼意思?unicode編碼簡介作者:由 韓蘭若 發表于 曲藝時間:2020-05-03頭碼什麼意思在電腦上處理文字的時候,你可能經常接觸到一個名詞,叫UTF-8。

你會不會覺得一絲疑惑,這到底是什麼東西?用一句話說明的話,UTF-8是一種編碼格式,一個位元組包含8個位元。

等會,什麼是編碼,什麼又是位元?為什麼要用這個東西?那我們從基礎說起,簡單的介紹一下基本概念:編碼我們都知道人有人的語言,計算機有計算機的語言,就是機器語言,所謂的二進位制,0和1,1代表有一個訊號,0表示沒有訊號。

那怎麼把人的語言翻譯成機器語言呢,就需要一個字典,字典就是ASCII,如下圖,左邊是這個行為就是編碼,左邊是機器可以識別的ASCII碼,右面是代表的字元,比如00100001代表“!”,從左到右轉換就是解碼(decode),從右到左就是編碼(encode)。

因為ASIIC碼有8位數,每位是一個位元(bit),8位就是一個位元組(byte)。

除了第一位是0,其他7位都可以有0或者1兩個選擇,所以ASCII一共可以表示2^7,也就是128個字元。

包括a-z大小寫,0-9數字和一些標點符號等。

其中真正可讀的只有95個字元,其他的都是一些控制符,比如NUL,代表NULL。

對於英語來說,ASCII包括所有的字母了,但是對於其他的語言來說,比如漢語,當然95個字元遠遠不夠。

有人說ASCII的第一位只能是0很浪費,如果也可以是1的話,就會多128個組合,一共256個。

然而這樣也不夠。

所以我們有:多位元組編碼上述編碼是單位元組編碼,也就是隻有8個位元。

如果想匹配多於256個字元的語言,一個位元組顯然不夠,用兩個位元組的話,16位元,可以編碼65536個字元,BIG-5就是一個雙位元組編碼方式,它包括大多數中文繁體字,GB18030則包括繁體和簡體。

比如:這樣每種語言可能都有他們的編碼體系,用著不同的位元組,對於人和機器來說,這樣都很容易混亂。

所以我們有:統一編碼Unicode像上文說的,對於一些語言單位元組編碼不夠,所以採用雙位元組,雙位元組也不夠的時候可以採用三位元組,甚至四位元組,位元組是不是越多越好呢?並不是,因為位元組用的越多,那些用單位元組就能表示的字元會增加很多個0,浪費很多容量。

比如A可能就是00000000000000000000000001000001,這樣就沒有必要了。

如果一個人想寫不同的語言,那他最好使用Unicode。

Unicode用多少個位元組呢?0個。

因為Unicode其實不是一種編碼,而是定義了一個表,表中為世界上每種語言中的每個字元設定了統一併且唯一的碼位(codepoint),以滿足跨語言、跨平臺進行文字轉換的要求。

在表示一個Unicode的字元時,通常會用“U+”然後緊接著一組十六進位制的數字來表示這一個字元。

如下圖。

比如一個人想寫一篇文章,包括英語和日語,單位元組編碼可以表示英語,但是顯然不能滿足他寫日語,因為他需要3個位元組才能表示一個『あ』,也就是111000111000000110000010。

他可以用雙位元組編碼,這樣他只需要一個雙位元組,也就是0011000001000010。

所以他可以選擇語言最高所需要的編碼,也就是UTF-16。

如果他只需要寫英語,那UTF-8就可以。

UTF-8UTF-8的特點是對不同範圍的字元使用不同長度的編碼。

上表表示如何從一個從Unicode轉化到UTF-8,對於前0x7F的字元,UTF-8編碼和ASCII碼是一一對應的。

如果一個字元在000800-00FFFF之間,那轉化到UTF-8需要用三位元組模板,使用16個碼位,每個x就是一個碼位。

比如『漢』這個字的Unicode編碼是0x6C49。

0x6C49在0x0800-0xFFFF之間,使用3位元組模板:1110xxxx10xxxxxx10xxxxxx。

將0x6C49寫成二進位制是:0110110001001001,用這個位元流依次代替模板中的x,得到:111001101011000110001001。

當然如果用16位更節約空間。

對於中文而言,Unicode16編碼裡面已經包含了GB18030裡面的所有漢字(27484個字)。

Unicode的好處如果一個語言支援Unicode,說明它本身一個字元就是單位元組,比如英語:>>>string_e=‘hello’>>>string_e[0]‘h’每個字元都是一個8位的字串。

所以在Python裡用字串的擷取功能[],就會給我們第一個位元組,同時也是一個字元h。

如果是漢語,在UTF-8中三個位元組才能代表一個字元。

如果我們同樣使用擷取[]:>>>string=‘漢字’>>>string[0]‘\xe6’只會給我們返回一個「漢」這個字的第一個位元組,也就是11100110,但是「漢」需要用111001101011110010100010才能表示。

那我們要怎麼才能擷取漢字的第一個字元呢?>>>string_u=string。

decode(‘UTF-8’)>>>string_u[0]u‘\u6c49’>>>print(string_u[0]。

encode(‘UTF-8’))漢將「漢字」解碼到Unicode,這時再擷取第一個字元就是一個u開頭的Unicode了,再用UTF-8編碼,返回的就是「漢」這個字元了。

在進行漢字文字分析時可能會有更多應用,本文先講到這裡。

標簽: 位元組  編碼  UTF  Unicode  字元  上一篇:馬卡龍--若人生只如初見下一篇:肺癌的診斷為什麼要做那麼多檢查,哪一個最重要猜你喜歡時間序列檢索@Deepunsupervisedbinarycodingnetworksformultivariatetimeseriesretrieval2021-11-17商標知多少?昨日、今日、明日還有更多新鮮事2020-10-19C語言的《轉義序列》真的沒搞懂,有誰能幫忙解析?2021-10-28朱一龍先生的電碼到底是怎麼翻譯的?2020-05-09Javascript正則表示式巧用Unicode匹配特殊字元2018-04-26搜索推薦閱讀1明白這些!不愁選不到好路亞竿2火影:哪些忍者不適合進暗部,凱被團藏和三代拒絕3練習書法,到底用什麼紙最好4GDP和國民幸福程度之間的關係5熱瑪吉是啥?熱瑪吉什麼年齡做比較好



請為這篇文章評分?