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 - Wikipediahttp://unicode.org 網站有個檢索工具很好用,比如要檢索中國的中字:http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=%E4%B8%AD從頁面上也能看出好多種漢字字符集,可供學習參考。題主你是不是想發明個統一的完美的中文編碼標準?走上轟轟烈烈的推廣偉大發明之路?掃清中文信息化障礙,促進中華民族的偉大復興?
推薦閱讀:
※字元編碼是否是軟體工程中最噁心的問題?
※程序在處理文本的時候如何區分 [ANSI] 和 [無BOM的UTF8] 這兩種編碼?
※十進位轉二進位為什麼不是除以2?
※請大神幫忙看看這個編碼是什麼意思?十分感謝