GB2312 字符集.docx
《GB2312 字符集.docx》由会员分享,可在线阅读,更多相关《GB2312 字符集.docx(31页珍藏版)》请在冰豆网上搜索。
GB2312字符集
序言
这本手册用表格列出了GB2312汉字国家标准字符集的全部字符和编码,以及每个字符所对应的Unicode编码。
同时也列出了从Unicode到GB2312转换表。
这些表格的程式制作也收录在这本手册中。
修改记录:
∙第3.05版,二○○四年,局部修改。
∙第3.00版,二○○三年,整理成打印版。
∙第2.00版,一九九九年,整理成网页。
∙第1.00版,一九九七年,初稿完成。
阅读记录:
∙到2006年为止,本书已被阅读72,409次。
∙到2004年为止,本书已被阅读4,721次。
版权声明:
∙版权所有1997-2007杨和荣。
∙允许转载和使用,但必须保留版权声明
GB2312字符集和编码说明
GB2312字符集
GB2312是汉字字符集和编码的代号,中文全称为“信息交换用汉字编码字符集”,由中华人民共和国国家标准总局发布,一九八一年五月一日实施。
GB是“国标”二字的汉语拼音缩写。
GB2312字符集(characterset)只收录简化字汉字,以及一般常用字母和符号,主要通行于中国大陆地区和新加坡等地。
GB2312共收录有7445个字符,其中简化汉字6763个,字母和符号682个。
GB2312将所收录的字符分为94个区,编号为01区至94区;每个区收录94个字符,编号为01位至94位。
GB2312的每一个字符都由与其唯一对应的区号和位号所确定。
例如:
汉字“啊”,编号为16区01位。
GB2312字符集的区位分布表:
区号字数字符类别
0194一般符号
0272顺序号码
0394拉丁字母
0483日文假名
0586Katakana
0648希腊字母
0766俄文字母
0863汉语拼音符号
0976图形符号
10-15备用区
16-553755一级汉字,以拼音为序
56-873008二级汉字,以笔划为序
88-94备用区
这本手册列出了GB2312的全部字符和它们的区位号。
GB2312编码
GB2312原始编码(encoding)是对所收录的每个字符都用两个字节(byte)表示。
第一字节为“高字节”,由字符的区号值加上32而形成;第二字节为“低字节”,由字符的位号值加上32而形成。
例如:
汉字“啊”,编号为16区01位。
它的高字节为16+32=48(0x30),低字节为01+32=33(0x21),合并而成的编码为0x3021。
在区位号值上加32的原因大慨是为了避开低值字节区间。
由于GB2312原始编码与ASCII编码的字节有重叠,现在通行的GB2312编码是在原始编码的两个字节上各加128修改而形成。
例如:
汉字“啊”,编号为16区01位。
它的原始编码为0x3021,通行编码为0xB0A1。
如果不另加说明,GB2312常指这种修改过的编码。
这本手册列出了GB2312的全部字符和它们的编码。
GB2312与Unicode的关系
GB2312字符集是Unicode字符集的一个子集。
这也就是说,GB2312所收录的每一个字符都收录在Unicode之中。
但是GB2312编码和Unicode编码确没有什么相同之处。
同一个汉字,它的GB2312编码和Unicode编码确毫不相同。
例如:
汉字“啊”,它的GB2312编码为0xB0A1,但是它的Unicode编码为0x554A。
这本手册为GB2312的每一个字符列出了它所对应的Unicode编码和UTF-8(UnicodeTransformationFormat-8-bit)编码。
从GB2312到Unicode转换表制作程式
这本手册里的字符与汉字编码列表由下面的程式所生成。
/**
*GB2312Unicde.java
*Copyright(c)1997-2003byDr.HerongYang
*/
importjava.io.*;
importjava.nio.*;
importjava.nio.charset.*;
classGB2312Unicde{
staticOutputStreamout=null;
staticcharhexDigit[]={'0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F'};
staticintb_out[]={201,267,279,293,484,587,625,657,734,782,827,
874,901,980,5590};
staticinte_out[]={216,268,280,294,494,594,632,694,748,794,836,
894,903,994,5594};
publicstaticvoidmain(String[]args){
try{
out=newFileOutputStream("gb2312.gb");
writeCode();
out.close();
}catch(IOExceptione){
System.out.println(e.toString());
}
}
publicstaticvoidwriteCode()throwsIOException{
booleanreserved=false;
Stringname=null;
//GB2312isnotsupportedbyJDK.SoIamusingGBK.
CharsetDecodergbdc=Charset.forName("GBK").newDecoder();
CharsetEncoderuxec=Charset.forName("UTF-16BE").newEncoder();
CharsetEncoderu8ec=Charset.forName("UTF-8").newEncoder();
ByteBuffergbbb=null;
ByteBufferuxbb=null;
ByteBufferu8bb=null;
CharBuffercb=null;
intcount=0;
for(inti=1;i<=94;i++){
//Definingrowsettings
if(i>=1&&i<=9){
reserved=false;
name="Graphicsymbols";
}elseif(i>=10&&i<=15){
reserved=true;
name="Reserved";
}elseif(i>=16&&i<=55){
reserved=false;
name="Level1characters";
}elseif(i>=56&&i<=87){
reserved=false;
name="Level2characters";
}elseif(i>=88&&i<=94){
reserved=true;
name="Reserved";
}
//writingrowtitle
writeln();
writeString("
");
writeNumber(i);
writeString("Row:
"+name);
writeln();
writeString("
");
writeln();
if(!
reserved){
writeln();
writeHeader();
//loopingthroughallcharactersinonerow
for(intj=1;j<=94;j++){
bytehi=(byte)(0xA0+i);
bytelo=(byte)(0xA0+j);
if(validGB(i,j)){
//gettingGB,UTF-16BE,UTF-8codes
gbbb=ByteBuffer.wrap(newbyte[]{hi,lo});
try{
cb=gbdc.decode(gbbb);
uxbb=uxec.encode(cb);
cb.rewind();
u8bb=u8ec.encode(cb);
}catch(CharacterCodingExceptione){
cb=null;
uxbb=null;
u8bb=null;
}
}else{
cb=null;
uxbb=null;
u8bb=null;
}
writeNumber(i);
writeNumber(j);
writeString("");
if(cb!
=null){
writeByte(hi);
writeByte(lo);
writeString("");
writeHex(hi);
writeHex(lo);
count++;
}else{
writeGBSpace();
writeString("null");
}
writeString("");
writeByteBuffer(uxbb,2);
writeString("");
writeByteBuffer(u8bb,3);
if(j%2==0){
writeln();
}else{
writeString("");
}
}
writeFooter();
}
}
System.out.println("NumberofGBcharactersworte:
"+count);
}
publicstaticvoidwriteln()throwsIOException{
out.write(0x0D);
out.write(0x0A);
}
publicstaticvoidwriteByte(byteb)throwsIOException{
out.write(b&0xFF);
}
publicstaticvoidwriteByteBuffer(ByteBufferb,intl)
throwsIOException{
inti=0;
if(b==null){
writeString("null");
i=2;
}else{
for(i=0;i}
for(intj=i;j}
publicstaticvoidwriteGBSpace()throwsIOException{
out.write(0xA1);
out.write(0xA1);
}
publicstaticvoidwriteString(Strings)throwsIOException{
if(s!
=null){
for(inti=0;iout.write((int)(s.charAt(i)&0xFF));
}
}
}
publicstaticvoidwriteNumber(inti)throwsIOException{
Strings="00"+String.valueOf(i);
writeString(s.substring(s.length()-2,s.length()));
}
publicstaticvoidwriteHex(byteb)throwsIOException{
out.write((int)hexDigit[(b>>4)&0x0F]);
out.write((int)hexDigit[b&0x0F]);
}
publicstaticvoidwriteHeader()throwsIOException{
writeString("
");
writeln();
writeString("Q.W.");
writeGBSpace();
writeString("GBUni.UTF-8");
writeString("");
writeString("Q.W.");
writeGBSpace();
writeString("GBUni.UTF-8");
writeln();
writeln();
}
publicstaticvoidwriteFooter()throwsIOException{
writeString("");
writeln();
}
publicstaticbooleanvalidGB(inti,intj){
for(intl=0;lif(i*100+j>=b_out[l]&&i*100+j<=e_out[l])returnfalse;
}
returntrue;
}
}
GB2312(SimplifiedChinese)charactercodetable
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
A1A0 、。
·ˉˇ¨〃々—~‖…‘’
A1B0“”〔〕〈〉《》「」『』〖〗【】
A1C0±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠
A1D0⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵
A1E0∴♂♀°′″℃$¤¢£‰§№☆★
A1F0○●◎◇◆□■△▲※→←↑↓〓
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
A2A0ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ
A2B0⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
A2C0⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾
A2D0⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦
A2E0⑧⑨⑩€㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩
A2F0ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
A3A0!
"#¥%&'()*+,-./
A3B00123456789:
;<=>?
A3C0@ABCDEFGHIJKLMNO
A3D0PQRSTUVWXYZ[\]^_
A3E0`abcdefghijklmno
A3F0pqrstuvwxyz{|} ̄
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
A4A0ぁあぃいぅうぇえぉおかがきぎく
A4B0ぐけげこごさざしじすずせぜそぞた
A4C0だちぢっつづてでとどなにぬねのは
A4D0ばぱひびぴふぶぷへべぺほぼぽまみ
A4E0むめもゃやゅゆょよらりるれろゎわ
A4F0ゐゑをん
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
A5A0ァアィイゥウェエォオカガキギク
A5B0グケゲコゴサザシジスズセゼソゾタ
A5C0ダチヂッツヅテデトドナニヌネノハ
A5D0バパヒビピフブプヘベペホボポマミ
A5E0ムメモャヤュユョヨラリルレロヮワ
A5F0ヰヱヲンヴヵヶ
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
A6A0ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟ
A6B0ΠΡΣΤΥΦΧΨΩ
A6C0αβγδεζηθικλμνξο
A6D0πρστυφχψω
A6E0︵︶︹︺︿﹀︽︾﹁﹂﹃﹄︻︼
A6F0︷︸︱︳︴
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
A7A0АБВГДЕЁЖЗИЙКЛМН
A7B0ОПРСТУФХЦЧШЩЪЫЬЭ
A7C0ЮЯ
A7D0абвгдеёжзийклмн
A7E0опрстуфхцчшщъыьэ
A7F0юя
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
A8A0āáǎàēéěèīíǐìōóǒ
A8B0òūúǔùǖǘǚǜüêɑńňǹ
A8C0ɡㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏ
A8D0ㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟ
A8E0ㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ
A8F0
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
A9A0─━│┃┄┅┆┇┈┉┊┋
A9B0┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛
A9C0├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫
A9D0┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻
A9E0┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋
A9F0
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
AAA0
AAB0
AAC0
AAD0
AAE0
AAF0
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
ABA0
ABB0
ABC0
ABD0
ABE0
ABF0
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
ACA0
ACB0
ACC0
ACD0
ACE0
ACF0
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
ADA0
ADB0
ADC0
ADD0
ADE0
ADF0
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
AEA0
AEB0
AEC0
AED0
AEE0
AEF0
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
AFA0
AFB0
AFC0
AFD0
AFE0
AFF0
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
B0A0啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘
B0B0鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱
B0C0袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋
B0D0靶把耙坝霸罢爸白柏百摆佰败拜稗斑
B0E0班搬扳般颁板版扮拌伴瓣半办绊邦帮
B0F0梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
B1A0薄雹保堡饱宝抱报暴豹鲍爆杯碑悲
B1B0卑北辈背贝钡倍狈备惫焙被奔苯本笨
B1C0崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕
B1D0毙毖币庇痹闭敝弊必辟壁臂避陛鞭边
B1E0编贬扁便变卞辨辩辫遍标彪膘表鳖憋
B1F0别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
B2A0病并玻菠播拨钵波博勃搏铂箔伯帛
B2B0舶脖膊渤泊驳捕卜哺补埠不布步簿部
B2C0怖擦猜裁材才财睬踩采彩菜蔡餐参蚕
B2D0残惭惨灿苍舱仓沧藏操糙槽曹草厕策
B2E0侧册测层蹭插叉茬茶查碴搽察岔差诧
B2F0拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖
code+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
B3A0场尝常长