java判断Unicode编码形式的文件中的汉字的例子很多,但是判断gb2312编码形式的文件中的汉字的例子很少,从网上找来一个共享一下,试验过,很好用。目的是判断gb2312编码形式的文件中的汉字,这里指的汉字不包括中文标点符号等01-09区中的特殊符号等。
public static boolean isCS(String str){
if(null==str) return false;
if(str.trim()== " ") return false;
byte[] bytes=str.getBytes();
if(bytes.length <2)
return false;
byte aa=(byte)0xB0;
byte bb=(byte)0xF7;
byte cc=(byte)0xA1;
byte dd=(byte)0xFE;
if(bytes[0] >=aa && bytes[0] <=bb){ //高字节
if(bytes[1]
dd){ //低字节
return false;
}
return true;
}
return false;
}
给参数str赋值:str="、啊任何人决。〔比照〕年制定"
输出结果为:
、false
啊true
任true
何true
人true
决true
。false
〔false
比true
照true
〕false
年true
制true
定true
结果分析:该程序实现了判断中文字,但是对于中文标的符号等都进行了过滤。
//String UnicodeChineseChar =
"[\u4e00-\u9fa5]";
//String GB2312ChineseChar =
"[\xb0-\xf7][\xa0-\xfe]"
[\xb0-\xf7]|[\xa0-\xfe]
gb2312一二级汉字区“高位字节”的范围是0xB0-0xF7,“低位字节”的范围是0xA1-0xFE
GB2312补充知识:
GB 2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。
01-09区为特殊符号。
16-55区为一级汉字,按拼音排序。
56-87区为二级汉字,按部首/笔画排序。
10-15区及88-94区则未有编码。
“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上
0xA0)。
由于一级汉字从16区起始,汉字区的“高位字节”的范围是0xB0-0xF7,“低位字节”的范围是0xA1-0xFE,占用的码位是
72*94=6768。其中有5个空位是D7FA-D7FE。