gb2312是簡體中文系統的標準編碼 用「區」 跟「位」的概念表示 稱之為區位碼
區指代大的範圍 位相當於偏移量。
每個漢字佔兩個位元組
高位位元組」的範圍是0xb0-0xf7,「低位位元組」的範圍是0xa1-0xfe。
它的規律好像是按拼音a到z的順序排列的
「啊」字是gb2312之中的第乙個漢字,它的區位碼就是1601
為此我們現在用**的方式輸出乙個漢字
c#下是little位元組序 b0跑後面去了。
1螢幕上輸出的是漢字「啊」ushort u = 0xa1b0;2
byte chs =bitconverter.getbytes(u);
3 console.write(encoding.getencoding("
gb2312
").getstring(chs));
但是注意並不代表 寫個迴圈從0xba1 到0xf7fe就可以輸出所有的漢字,這個很簡單比如高位從1到9 低位從1到9 只有81種組合。
並不代表99-11就是結果 這麼二的問題 暈。實際上通過這種方式漢字的個數總共是6768個,理解了區位碼的概念後你就知道怎樣去處理gb2312的漢字編碼了。
下面我們就用這種方式來輸出所有的漢字
1//gb23122//
b0-f7,低位元組從a1-fe3//
關於gb2312的解釋:
, ascii是美國資訊交換標準碼 他是從0~127,乙個位元組8位最高是255 就是說乙個位元組都用不完。
gb2312裡也有字母 稱之為全形字符 ,gb2312裡也包括ascii碼稱之為半形字元。
全形字符看上去怪怪的 感覺有點不一樣 就像這樣 全形: a半形:a 全形:a 半形:a
全形字符除了在文字系統裡用到沒什麼實際作用。
全形字符的第乙個位元組總是被置為163,而第二個位元組則是相同半形字元碼加上128(不包括空格)。
如半形a為65,則全形a則是163(第乙個位元組)、193(第二個位元組,128+65)。
知道這個規律 那麼我們也可以遍歷處所有ascii對應的全形字符:
1/**關於全形字符的解釋:2*實際上,全形字符的第乙個位元組總是被置為163,
3*而第二個位元組則是相同半形字元碼加上128(不包括空格)。
4*如半形a為65,則全形a則是163(第乙個位元組)、193(第二個位元組,128+65)。5*/
6for (byte k = 0x00; k < 0x7f; k++)
7
winxp下文字檔案預設的儲存編碼是ansi ,注意 這個ansi 他的概念跟gb2312又有不同,除此之外還有unicode 、utf-8
他們之間的關係是:
不同的國家和地區制定了不同的標準,由此產生了 gb2312, big5, jis 等各自的編碼標準。
這些使用 2 個位元組來代表乙個字元的各種漢字延伸編碼方式,稱為 ansi 編碼。
在簡體中文系統下,ansi 編碼代表 gb2312 編碼,在日文作業系統下,ansi 編碼代表 jis 編碼
c#進行文字讀取時新同學最容易出現不理解為什麼文字檔案讀取時是亂碼
\config.txt");
2string
line;
3while ((line = sr.readline()) != null)4
因為讀取的方式 也就是解碼的方式跟文字儲存時不一樣,所以初始化streamreader時最好指定編碼,default即ansi
\config.txt
", system.text.encoding.default);
關於ansi unicode的區別:
原生xhr處理字串編碼
在ajax中,會對傳送的資料進行編碼上的處理,防止和 特殊符號重複,造成解析錯誤。下面是我總結的原生xhr編碼處理,原生的ajax穿插到jquery寫法的ajax中 xhr.open post 請求位址 post方式要設定請求頭 var name encodeduricompotent 紅紅 火火 ...
php中字串編碼
php中抓取網頁拼接url的時候經常需要進行編碼,這時候就用到兩個函式 mb detect encoding 檢測字元的編碼。mb convert encoding 轉換字元的編碼 使用當前的 detect order 來檢測字元編碼 echo mb detect encoding str auto...
Python 中的字串編碼
異常處理在之前的學習中我們一直沒有接觸過。哦對,我們甚至還不知道怎麼向程式輸入一段字串。那麼我們在這裡提供乙個小例子。在命令列中,我們輸入 好了,我們已經知道如何輸入乙個字串了,那麼當我們輸入 s raw input enter something 之後按回車,然後,我們按下 ctrl d 這時,我...