GB2312编码
GB2312编码
GB2312字符集简介:
GB2312是汉字字符集和编码的代号,中文全称为 “信息交换用汉字编码字符集” ,由中华人民共和国国家标准总局发布,一九八一年五月一日实施。GB是 “国标” 二字的汉语拼音缩写。
GB2312 字符集 (character set) 只收录简化字汉字,以及一般常用字母和符号,主要通行于中国大陆地区和新加坡等地。GB2312 共收录有 7445 个字符,其中简化汉字 6763 个,字母和符号 682 个。
GB2312 将所收录的字符分为 94 个区,编号为 01 区至 94 区;每个区收录 94 个字符,编号为 01 位至 94 位。GB2312 的每一个字符都由与其唯一对应的区号和位号所确定。例如:汉字“啊”,编号为 16 区 01 位。
GB2312编码的范围为:高字节范围是0XA1-0XFF,低字节范围是0XA1-0XFF。
链接: GB2312简体中文编码表
区位码:
区位码简单来说就是一个汉字或者符号对应一个字符表(信息交换用汉字编码字符集,GB2312标准)中的位置。区位码是一个四位的十进制数,每个区位码都对应着一个唯一的汉字或符号,它的前两位叫做区码,后两位叫做位码。
GB2312字符集的区位分布表:
信息交换用汉字编码字符集》可以理解成是一个表格,对所收汉字进行了 “分区” 处理,每区含有94个汉字/符号。
区号 字数 字符类别
01 94 一般符号
02 72 顺序号码
03 94 拉丁字母
04 83 日文假名
05 86 Katakana
06 48 希腊字母
07 66 俄文字母
08 63 汉语拼音符号
09 76 图形符号
10-15 备用区
16-55 3755 一级汉字,以拼音为序
56-87 3008 二级汉字,以笔划为序
88-94 备用区
GB2312编码:
GB2312 原始编码 (encoding) 是对所收录的每个字符都用两个字节 (byte) 表示。第一字节为 “高字节”,由字符的区号值加上32 而形成;第二字节为 “低字节”,由字符的位号值加上 32 而形成。在区位号值上加 32 的原因大慨是为了避开低值字节区间。
由于 GB2312 原始编码与ASCII 编码的字节有重叠,现在通行的 GB2312 编码是在原始编码的两个字节上各加128 修改而形成,如果不另加说明,GB2312 常指这种修改过的编码。
例如:汉字 “啊” ,编号为 16 区 01 位。
原始编码:高位字节为16+32=48,16进制为0X30;低位字节为1+32=33,16进制为0X21。所以它的原始编码为 0x3021。
通行编码:高位字节为16+32+128=176,16进制为0XB0;低位字节为1+32+128=161,16进制为0XA1。所以它的通行编码为 0xB0A1。
1 package com.nice.util; 2 3 public class GB2312ValueUtil { 4 5 // 头标识 6 private static final String HEAD = "code +0 +1 +2 +3 +4 +5 +6 " + 7 "+7 +8 +9 +A +B +C +D +E +F"; 8 9 // 分隔符 10 private static final String SEPARATOR = "---------------------------------------" + 11 "-----------------------------------------------"; 12 13 /** 14 * 打印GB2312简体中文编码值 15 */ 16 public static void printGB2312CodingValue() { 17 // 遍历所有区码 18 for (int region = 0XA1; region < 0XFF; region++) { 19 // 区码-128-32 20 int i = region - 128 - 32; 21 println(SEPARATOR); 22 println("第 " + i + " 区:"); 23 println(SEPARATOR); 24 println(HEAD); 25 // 遍历所有位码 26 for (int bitCode = 0XA0; bitCode <= 0XFF; bitCode++) { 27 // 位码-128-32 28 int j = bitCode - 128 - 32; 29 if (j == 0) { 30 print(Integer.toHexString(region) + "" 31 + Integer.toHexString(bitCode) + " "); 32 } 33 print(Integer.toHexString(region) + "" 34 + Integer.toHexString(bitCode) + " "); 35 // 小于95位 36 if ((j + 1) % 0X10 == 0 && (j + 1) < 0X5F) { 37 print("\n"); 38 print(Integer.toHexString(region) + "" 39 + Integer.toHexString(bitCode + 1) + " "); 40 } 41 } 42 print("\n"); 43 } 44 println(SEPARATOR); 45 } 46 47 /** 48 * @param context 49 */ 50 private static void println(Object context) { 51 if (context != null) { 52 System.out.println(context); 53 } else { 54 System.out.println(); 55 } 56 57 } 58 59 /** 60 * @param context 61 */ 62 private static void print(Object context) { 63 System.out.print(context); 64 } 65 66 /** 67 * @param args 68 */ 69 public static void main(String[] args) { 70 printGB2312CodingValue(); 71 } 72 73 }
转载: http://blog.163.com/lyq_163_2009/blog/static/13408269620116752322992/
浙公网安备 33010602011771号