有人说中国常用字是3500左右。嗯,一个软盘好像就能存10万字,那么我们用java是不是能获取所有的常用的字?
应用开发时,很多同学都处理过中文乱码的问题吧,怎么解决的,是不是ISO-8859-1或UTF-8之类的编码互相转。
有java与字符串编码编程经验,我们不难想到是否可以从一个字符集找出所有的中文字符,不就是所有的中文字么,那我们就来取下较少的也差不多是常用的字符集"GB2312"。
//https://blog.csdn.net/gtkknd/article/details/80593886
/*在GB2312编码的实际应用中,有时会用到区位码的概念。GB2312编码对所收录字符进行了"分区"处理,共94个区,每个区含有94个位,共8836个码位.
而区位码实际是GB2312编码的内部形式,它规定对收录的每个字符采用两个字节表示,
第一个字节为"高字节",对应94个区;第二个字节为"低字节",对应94个位。所以它的区位码范围是:0101-9494.
为兼容ASCII码,区号和位号分别加上0xA0偏移就得到GB2312编码。在区位码上加上0xA0偏移,
可求得GB2312编码范围:0xA1A1-0xFEFE,其中汉字的编码范围为0xB0A1-0xF7FE,第一字节0xB0-0xF7
(对应区号:16-87),第二个字节0xA1-0xFE(对应位号:01-94).
*/
PrintWriter pw=new PrintWriter(new OutputStreamWriter(new FileOutputStream("/Users/chengzhong/work/yimilan_work/label/chars.txt"),"UTF-8"));
int n=0;
//区长度
for(int i=Integer.parseInt("B0",16);i<=Integer.parseInt("F7",16);i++) {
//位长度
for(int j=Integer.parseInt("A1",16);j<=Integer.parseInt("FE",16);j++) {
byte[] tmp=new byte[2];
tmp[0]=(byte)i;
tmp[1]=(byte)j;
n++;
String word=new String(tmp,"GB2312");
System.out.println(word);
pw.println(word);
String locArea=String.valueOf(Integer.toHexString(i)+Integer.toHexString(j));
try {
charService.insertWord(locArea,word,Integer.toHexString(word.charAt(0)));
}catch(Exception e) {
log.error(e.getMessage(),e);
}
}
}
System.out.println("总字数:"+n);
pw.close();通过上面这段代码,我得到了6千多个汉字,这差不多覆盖常用汉字了。
评论:
提交