当前位置:编程学习 > 网站相关 >>

字符集GB2312的理解

在计算机程序中,通常都有涉及到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  www.zzzyk.com
  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;
 
通过对字符集的理解,可以利用这些特点来开发出更加高效的计算机程序,也有助于理解一下转码操作。如应用程序保存时,有时候会出现汉字变乱码的现象。反正我是有些理解了,所以才总结下来。
补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,