在電腦程式中,通常都有涉及到gbk,gb2312編碼方式的問題。常見的是網頁開啟是亂碼啊,api之間傳輸的是亂碼字元啊等等。
我們都知道,在電腦程式中,所有的資訊都是以01來表示的,之所以編碼是人類需要和計算機溝通。例如,人類要將乙個漢字如「啊」儲存在計算機中,如果採用gb2312編碼儲存的話,「啊」的b0a1.
gb2312標準共收錄6763個漢字,其中一級漢字3755個,二級漢字3008個;同時收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母在內的682個字元。
在gb2312中,對所收物件進行了「分割槽」處理,每區含有94個物件。這種表示方式也稱為區位碼。
01-09區為特殊符號。
16-55區為一級漢字,按拼音排序。
56-87區為二級漢字,按部首/筆畫排序。
10-15區及88-94區則未有編碼。
也可以將gb2312編碼表理解成乙個**,它就有94行94列,一共8836個格仔。
01-09行,收錄的是特殊符號
16-55行為一級漢字,按拼音排序。
56-87行為二級漢字,按部首/筆畫排序。
10-15行及88-94行則未有編碼。
其中,「啊」字是gb2312之中的第乙個漢字,它的區位碼就是1601。
使用gb2312作為字符集的電腦程式通常採用euc儲存方法,以便相容於ascii。
這些漢字及符號均以兩個位元組來表示。第乙個位元組稱為「高位位元組」,第二個位元組稱為「低位位元組」。「高位位元組」使用了0xa1-0xf7(把01-87區的區號加上0xa0),「低位位元組」使用了0xa1-0xfe(把01-94加上0xa0)。
因為一級漢字從16區起始,所以漢字區的「高位位元組」的範圍是0xb0-0xf7,「低位位元組」的範圍是0xa1-0xfe,占用的碼位是72*94=6768。
但是,這6768個區位碼中,有5個是空位,分別是d7fa、d7fb、d7fc、d7fd、d7fe。
再以「啊」字舉例,在大多數電腦程式中,它都會以兩個位元組,0xb0(第乙個位元組)0xa1(第二個位元組)儲存。(與區位碼對比:0xb0=0xa0+16,0xa1=0xa0+1,就是1601)。
sql> select chr(f_hex2dec('b0a1')) from dual;
chr(f_hex2dec('b0a1'))
----------------------
啊根據這些規則,我們將這些字元統統列印出來看一下。
declare
v_offset number;
begin
v_offset := f_hex2dec('a0');
for qu in 16 .. 55 loop
for wei in 1 .. 94 loop
if (qu = 16) then
dbms_output.put_line(qu || ':' || wei || '=' ||
chr(f_hex2dec(f_dec2hex(qu + v_offset) ||
f_dec2hex(wei + v_offset))));
end if;
end loop;
end loop;
end;
declare
v_offset number;
begin
v_offset := f_hex2dec('a0');
for qu in 56 .. 87 loop
for wei in 1 .. 94 loop
if (qu = 87) then
dbms_output.put_line(qu || ':' || wei || '=' ||
chr(f_hex2dec(f_dec2hex(qu + v_offset) ||
f_dec2hex(wei + v_offset))));
end if;
end loop;
end loop;
end;
通過對字符集的理解,可以利用這些特點來開發出更加高效的電腦程式,也有助於理解一下轉碼操作。如應用程式儲存時,有時候會出現漢字變亂碼的現象。反正我是有些理解了,所以才總結下來。
GB2312字符集顯示
最近需要做一下12 12點陣的gbk字符集,但是網上只找到了gb2312的字符集一大堆說法,陷身於網上的大海洋中,看了一下資料,有點明白漢字在螢幕上如何顯示了 比如顯示 漢字 兩個字,因為漢字是兩個位元組顯示的,比如ab兩個位元組,第乙個位元組是高位元組,第二個位元組是低位元組,在gb2312中,字...
安裝GB2312字符集
linux下安裝gb2312的示例 step 1 到linux字符集的安裝包目錄下 cd usr share i18n charmaps step 2 解壓該目錄下的gb2312.gz gunzip gb2312.gz step 3 安裝字符集 localedef f gb2312 i zh cn ...
GB2312的編碼規則
gb2312標準共收錄6763個漢字,其中一級漢字3755個,二級漢字3008個 同時,gb2312收錄了包括拉丁字母 希臘字母 日文平假名及片假名字母 俄羅斯語西里爾字母在內的682個全形字符。gb2312的出現,基本滿足了漢字的計算機處理需要,它所收錄的漢字已經覆蓋99.75 的使用頻率。gb2...