GB2312及其擴展標準和Unicode之間有什麼區別和優劣勢?

為什麼在中文編碼上沒能產生一個統一的標準?


GBK - Wikipedia

有啊。只不過保持到文件的格式跟一個字元映射過去的數字是多少,是兩個互相獨立的問題。


中文用戶輸入網站(如微博,論壇等),可 用unicode存儲(省空間)。出http頁面則用utf-8保證瀏覽器兼容性。


前端文件和後端文件全部採用無BOM頭的UTF-8編碼。

資料庫使用utf8_general_ci,伺服器控制台UTF-8。

就這樣統一去搞。不會被坑的。


提問者你能數出多少種中文編碼啊?

中文編碼的統一標準就是GBK/GB2312。算上Unicode,也就兩種。至於Big5隻在台灣地區採用也已經式微。哪來的各種?

現在的趨勢是UTF-8一統天下,中國除了某些冥頑不靈的網站還在用gb2312之外,大部分已經改用utf8了。

所以目前中文就一個國標gb2312,一個國際utf8,哪來的各種和優劣?


Gb231280年代初開始的國家標準,後來90年代不是太夠用了,微軟搞了個gbk用於中文windows,但也成了事實標準,最後國家又出手開始搞gb18030,它們是向下兼容的,區別主要是包含的字元多少。其中18030也有好幾個版本了,但你通常不用關心。值得注意的是gb2312和gbk都是雙位元組編碼(其實兼容ascii,所以認為1~2位元組也行),而gb18030除了雙位元組之外,還有4位元組部分,於是,中文漢字就不再能單純的假設為佔用2個位元組了。

其次是unicode家族,它的意義如同字面含義,就是要統一地球上所有文字的編碼。當然經過不斷打臉,也在不斷擴充。然而,Unicode 本身是字符集,不是編碼方式。utf-8, utf 16之類才是編碼。以這兩個為例,它們的最小單位是8個16個bit也就是1和2個位元組。最直觀感受,用utf 16保存的純英文文件用其他兼容編碼打開(英文部分其實大家都兼容ascii包括gb和utf8) 你會看到那個英文字母之間空了一個位置,這是因為最小單位是2個位元組,不用部分就用0填充了。接下來用UTF8 舉例子,它是可變長編碼,1~4位元組都很常見。再次強調utf-x之類的才是實際編碼,它們都是對Unicode 字符集的具體 存儲/傳輸 的 實現/標準。而如果平時說"Unicode 編碼"往往是說utf 16.

Utf編碼還有正序反序,就不展開了。

台灣的big5沒研究過也不展開了。

概念就這些,常用的也就gb和UTF8 和UTF16。說實在的,見過那麼多程序員,也沒見過幾個概念清晰的。包括我自己入行多年之後與各種編碼的文件奮戰之後也是如此,直到自己在silverlight 下實現了一個gb18030編碼,才算基本搞清楚其中的概念。


Code page - Wikipedia

每個codepage 編號代表了一種編碼方式,搜索chinese相關的只有很少幾項。

  • 1159 - T-Chinese EBCDIC
  • 936 – ANSI/OEM Simplified Chinese (gb2312) (DOS/V) (DBCS) (conflictive ID with Windows 936; Windows version is IBM 1386)
  • 938 – Traditional Chinese (DOS/V, OS/2)
  • 948 – Traditional Chinese SAA (OS/2)
  • 950 – Traditional Chinese (Big5 encoding)

其中 1159 是60年代IBM給打孔機搞的,早就廢棄了。

938,948都是給OS/2這個系統用的,現在OS/2墳頭草丈五吧

真正在用的只有 936, 950,而且950隻在個別省份和少數特別行政區使用。

  • 65001 – UTF-8 Unicode

UTF-8也是一個codepage,但是UTF-8編碼不是針對中文的,它是適用於所有文字的編碼。

可見中文編碼是非常統一的,看看codepage列表裡面的其它幾百項吧,某些語言才是編碼標準不統一的重災區,急需題主去拯救。


先問是不是 再問為什麼


兩種完全不一樣的編碼,GB2312中共有7445個字元符號,其中漢字6763個(一級漢字3755個,二級漢字3008個),非漢字元號682個,一級漢字按照漢語拼音排列,例如:啊(B0A1),阿(B0A2),可以使用GB2312編碼把一級漢字轉成漢語拼音。

UNICODE是按照部首/筆畫排序的


是不是想問gb2312 gb18030 gbk cjk unicode都能表示中文啊


不要想那麼多,用utf-8 without BOM就好。


看到有同學這樣問:

所以目前中文就一個國標gb2312,一個國際utf8,哪來的各種和優劣?

我來做一點補充。

至少,早年台灣有一種字符集叫做 CCCII,後來被美國人拿去作為EACC。參考這裡:

https://en.wikipedia.org/wiki/Chinese_Character_Code_for_Information_Interchange

這是一種有生命力的字符集。美國國會圖書館到現在還在用EACC。這種字符集和其他字符集一起用一種叫做 MARC-8 的形態進行統一包裝。參看這裡:

MARC-8 - Wikipedia

http://unicode.org 網站有個檢索工具很好用,比如要檢索中國的中字:

http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=%E4%B8%AD

從頁面上也能看出好多種漢字字符集,可供學習參考。


題主你是不是想發明個統一的完美的中文編碼標準?走上轟轟烈烈的推廣偉大發明之路?掃清中文信息化障礙,促進中華民族的偉大復興?


推薦閱讀:

字元編碼是否是軟體工程中最噁心的問題?
程序在處理文本的時候如何區分 [ANSI] 和 [無BOM的UTF8] 這兩種編碼?
十進位轉二進位為什麼不是除以2?
請大神幫忙看看這個編碼是什麼意思?十分感謝

TAG:編程 | 漢語 | 編碼 |