當前位置:編程學習大全網 - 編程語言 - Gbk編程

Gbk編程

ASCII、Unicode、GBK和UTF-8字符編碼的區別

很久以前,有壹群人決定用八個可以開關的晶體管組合成不同的狀態來代表世界上的壹切。他們看到這八個開關狀態都是好的,就把這個叫做“字節”。後來,他們制造了壹些可以處理這些字節的機器。當機器啟動時,它們可以用字節組合許多狀態,並且狀態開始變化。他們看到這樣很好,就把這臺機器叫做“電腦”。

起初,計算機只在美國使用。壹個8位字節* * *可以組合成256種不同的狀態。

他們指定了從0開始的32個狀態的特殊用途。壹旦終端和打印機達到了約定的字節,它們就會做壹些約定的動作。滿足0×10,

終端會換線。當遇到0×07時,終端會對人蜂鳴。比如遇到0x1b時,

打印機將以反白色打印單詞,或者終端以彩色顯示字母。他們看到這樣很好,就把這些低於0×20的字節狀態叫做“控制碼”。他們又把所有的都清空了

大小寫、標點符號、數字、大小寫字母用連續字節狀態表示,直到數字127,這樣計算機就可以用不同的字節存儲英文單詞。大家看到這個都有感覺。

很好,所以大家都把這個方案叫做ANSI(美國信息交換標準碼)的“Ascii”編碼。當時,世界上所有的計算機都使用相同的ASCII方案來保存英文字符。

後來就像建巴比倫塔壹樣,全世界的人都開始用電腦,但是很多國家都不用英語,很多國家的字母也不是ASCII碼,這樣就可以用電腦了。

保存他們的話,他們決定使用它們。

127後面的空格用來表示這些新的字母和符號,還增加了很多畫表時需要用到的橫線、豎線、十字等形狀,序號已經編到最後壹個狀態255。從128

頁面到255的字符集稱為“擴展字符集”。從此貪婪的人類沒有新的狀態可以利用。美帝國主義可能沒有想到,第三世界國家的人也要用電腦!

中國的人拿到電腦,已經沒有字節狀態可用來表示漢字了,還有6000多個常用漢字要保存。但這打不過中國的聰明人。我們很受歡迎。

幹脆把127後面那些奇怪的符號取消,

規定小於127的字符含義和原來壹樣,但當兩個大於127的字符連在壹起時,表示壹個漢字,從0xA1開始使用前面的字節(他稱之為高字節)。

0xF7,最後壹個字節(低位字節)範圍從0xA1到0xFE,這樣我們可以組合7000多個簡體漢字。在這些代碼中,我們也加入了數學符號,羅馬和希臘

字母和日文假名已經編好了,甚至是ASCII碼。

庫中所有的數字、標點和字母都經過了兩個字節的重新編碼,通常稱為“全角”字符,127以下的稱為“半角”字符。

中國人看到這個很好,就把這個漢字方案叫做“GB2312”。GB2312是ASCII的中文擴展。

但是中國漢字太多,我們很快發現很多人的名字在這裏打不出來,尤其是壹些國家領導人,很麻煩。所以我們必須繼續把

找出GB2312中未使用的碼點,老老實實使用。

後來不夠用了,就不再要求低位字節必須是127之後的內碼。只要第壹個字節大於127,就固定這是壹個漢字的開頭,不管後面有沒有擴展詞。

集合的內容。結果擴展後的編碼方案稱為GBK標準,包含了GB2312的全部內容,同時增加了近20000個新漢字(包括繁體字)和符號。後來少數民族也用電腦了,我們就擴充了壹下,增加了幾千個少數民族新詞。GBK擴展到GB18030。從此,中華民族的文化在電腦時代得以傳承。中國的程序員看到這壹系列漢字的編碼標準不錯,就叫“DBCS”(double

字節字符集

雙字節字符集)。在DBCS標準系列中,最大的特點是兩字節的漢字和壹字節的英文字符共存於同壹編碼方案中,所以他們編寫的程序支持中文。

需要註意字符串中每個字節的值。如果該值大於127,則顯示雙字節字符集中的字符。那時候都是祝福會編程的電腦和尚。

孩子壹天要說幾百遍下面這句口頭禪:“壹個漢字算兩個英文字!壹個漢字是兩個英文字符……”

因為當時各國都像中國壹樣制定了自己的編碼標準,結果就是誰也不理解對方的編碼,誰也不支持別人的編碼。甚至大陸和臺灣省只隔了150海。

在這個地區,使用同壹種語言的兄弟地區也分別采用不同的DBCS。

編碼方案——當時國內的人想讓電腦顯示漢字,就要裝壹個“漢字系統”來處理漢字的顯示和輸入,但是臺灣省那個無知的封建人士寫的算命程序。

您必須安裝另壹套支持BIG5。

什麽樣的編碼“千古漢字系統”可以用?如果妳安裝了錯誤的字符系統,顯示器將會失靈!我該怎麽辦?而且,世界民族之林中還有壹時半會兒用不上電腦的窮人。他們的話呢?

怎麽做?多麽巴比倫式的計算機命題啊!

就在這時,大天使加百列及時出現了——壹個名叫伊索的人。

國際組織(國際標準化組織)決定解決這個問題。他們采用的方法很簡單:廢除所有的區域編碼方案,創建壹個新的,包含地球上所有文化、字母和符號的方案。

密碼!他們打算稱之為“通用多八位編碼字符集”,簡稱UCS,俗稱“unicode”。

unicode剛制定的時候,計算機的內存容量有了很大的發展,空間不再是問題。所以ISO

直接規定所有字符必須用兩個字節表示,即16位。對於ASCII中的那些“半角”字符,unicode包保持它們原來的編碼不變,只是改變它們原來的長度。

後8位擴展為16位,其他文化和語言的字符全部重新編碼。因為“半角”的英文符號只需要使用低8位,所以它的高8位總是0,所以這個大氣的方案是

保存英文文本會浪費兩倍的空間。

這時,從舊社會走過來的程序員開始發現壹個奇怪的現象:他們的strlen函數不靠譜,壹個漢字不再等同於兩個字,而是壹個!是的,從unicode開始,無論是半角英文字母還是全角漢字,都是統壹的“壹字”!同時都是統壹的“兩個字節”。請註意“字符”和“字節”的區別。“字節”是壹個8位的物理存儲單位,而“字符”是壹個與文化相關的符號。在unicode中,壹個字符是兩個字節。壹個漢字算兩個英文字的時代快結束了。

Unicode也不是完美的,所以這裏有兩個問題。壹個是,我們如何區分unicode和ascii?計算機怎麽知道三個字節代表壹個符號而不是

三個符號呢?第二個問題是,我們已經知道,對於英文字母來說,壹個字節就足夠了。如果unicode規定每個符號由三個或四個字節表示,那麽每個

每個英文字母前必須有兩三個字節的0,這是對存儲空間的極大浪費,文本文件的大小也會大兩三倍,這是無法接受的。

Unicode在很長壹段時間內都無法普及,直到互聯網的出現。為了解決如何在網絡上傳輸unicode的問題,出現了許多用於傳輸的UTF(UCS傳輸格式)標準。顧名思義,UTF-8壹次傳輸8位數據,而UTF-16壹次傳輸16位數據。UTF-8是互聯網上使用最廣泛的unicode實現,它專為傳輸而設計,使編碼無國界,從而可以顯示世界上所有文化的字符。

UTF-8最大的特點之壹就是它是壹種變長編碼方法。它可以用1~4個字節來表示壹個符號,字節長度根據符號的不同而不同。當字符是ASCII碼時,

代碼範圍,它用壹個字節來表示,ASCII字符的壹個字節的編碼作為它的壹部分被保留。註意unicode占2個字節,而UTF-8占1個字節。

字符占用3個字節)。unicode到uft-8沒有直接的對應關系,但是需要壹些算法和規則進行轉換。

Unicode符號範圍| UTF 8編碼

(十六進制)|(二進制)

—————————————————————–

0000 0000-0000 007F | 0xxxxxxx

0000 0080-0000 07FF | 110 xxxxx 10 xxxxx

0000 0800-0000 FFFF | 110 xxxxx 10 xxxxx 10 xxxxx 10 xxxxx

0001 0000-0010 FFFF | 1110 xxxxx 10 xxxxx 10 xxxxx 10 xxxxx 10 xxxxx

之前字符編碼很模糊,網上搜索數據很混亂。看了這篇有趣的文章,我把之前模糊的知識點串聯起來,做了壹點總結,我和朋友們都明白了!

  • 上一篇:消失模鑄造技術都有哪些種類?
  • 下一篇:數字電子技術應用基礎的圖書目錄
  • copyright 2024編程學習大全網