1. 程式人生 > >計算機字元編碼詳解——從理論到實踐——參考資料

計算機字元編碼詳解——從理論到實踐——參考資料

gbk與gb2312的區別:

  • GB2312是中國規定的漢字編碼,也可以說是簡體中文的字符集編碼;
  • GBK 是 GB2312的擴充套件 ,除了相容GB2312外,它還能顯示繁體中文,還有日文的假名。
  • 總體說來,GBK包括所有的漢字,包括簡體和繁體。而gb2312則只包括簡體漢字。

引自:“gbk與gb2312的區別”百度百科
gb2312,全稱是GB2312-80《資訊交換用漢字編碼字符集 基本集》,1980年釋出,是中文資訊處理的國家標準,在大陸及海外使用簡體中文的地區(如新加坡等)是強制使用的唯一中文編碼。P-Windows3.2和蘋果OS就是以GB2312為基本漢字編碼, Windows 95/98則以GBK為基本漢字編碼、但相容支援GB2312。GB碼共收錄6763個簡體漢字、682個符號,其中漢字部分:一級字3755,以拼音排序,二級字3008,以偏旁排序。該標準的制定和應用為規範、推動中文資訊化程序起了很大作用。
GBK: 漢字國標擴充套件碼,基本上採用了原來GB2312-80所有的漢字及碼位,並涵蓋了原Unicode中所有的漢字20902,總共收錄了883個符號, 21003個漢字及提供了1894個造字碼位。 Microsoft簡體版中文Windows 95就是以GBK為內碼,又由於GBK同時也涵蓋了Unicode所有CJK漢字,所以也可以和Unicode做一一對應。

這真的是GB2312的區位碼是94的來歷 ?
在網上獲得了一些關於GB2312的區位碼是94的來歷說明,想請各位知情人士求證一下,具體內容核心思想摘抄如下:

來自 http://www.zhihu.com/question/21923181
為何採用94×94的區位碼?
ASCII使用了0x00~0x7F,而作為國際通用的精確數字計算使用的BCD編碼的範圍是0x00~0x99,所以GB2312應該可以選的範圍在0x9A~0xFF,為了預留一定空間避免衝突,可選範圍應該在0xA0~0xFF之間,但習慣上中國人喜歡用數字1來標示一個數據的開始,所以首位就定在了0xA1。同時,0xFF代表結束,而且程式設計師一般概念上都將0xFF定義為“空”,為了避免程式碼習慣上的問題,末尾自然選擇在了0xFE。因此,最重要的東西來了 0xFE-0xA0 + 1 = 94 。

cp936 — code page 936 (936是編號)

extended unicode characters:unicode字元擴充套件

中文是euc-cp936
日文是euc-cp932

gb2312以及gbk都是我國的編碼委員會制定的。cp936是微軟制定的。euc-cn是漢字在extended unicode characters碼錶裡的表示。

關於Windows記事本與Sublime Text對中文字元編碼轉換的問題:

1、在Windows記事本中,新建檔案,輸入“你好hello1234”,以ANSI格式儲存後;
2、在Sublime Text中開啟此檔案,檔案格式為GB2312,輸入GB2312內不支援的漢字“喆”,提示儲存失敗,原因是’\u5586’是非法的多位元組序列;

‘gb2312’ codec can’t encode character ‘\u5586’ in position 11: illegal multibyte sequence

第 11 個字元就是“喆”。

注意:如果不刪除這個欄位,Sublime Text會以UTF-8格式重新儲存這個檔案。

3、在Windows記事本中,輸入GB2312內不支援的漢字“喆”,按ANSI格式儲存成功;
4、再次用Sublime Text開啟此檔案,檔案格式已變為GBK。

綜上,Sublime Text是對GB2312和GBK做區分的,而Windows記事本在介面上是都以ANSI方式管理,併兼容這兩種方式。
我猜測,除非遇到GB2312不能識別的生僻字才使用GBK,否則預設以GB2312編碼格式儲存。
GBK作為GB2312的擴充套件碼,其檔案開頭的編碼標誌與GB2312應該是不同的,否則Sublime Text不會將GB2312和GBK區分顯示。

為什麼ansi可以包含漢字?

在簡體中文系統下,ANSI 編碼代表 GB2312 編碼,《資訊交換用漢字編碼字符集》
是由中國標準總局1980年釋出,1981年5月1日開始實施的一套國家 漢字編碼字符集
標準,標準號是GB 2312—1980。
它是計算機可以識別的編碼,適用於漢字處理、漢字通訊等系統之間的資訊交換。
基本集共收入漢字6763個和非漢字圖形字元682個。
整個字符集分成94個區,每區有94個位。每個區位上只有一個字元,

因此可用所在的區和位來對漢字進行編碼

這裡寫圖片描述

這裡寫圖片描述