这几天做一切词程序,想获得汉字的区位码,但不知如何做,还请高人指点谢谢
解决方案 »
- 这段代码中的JTextArea没有显示滚动条啊?
- 这个 TreeSet 集合中的 泛型限定 super 问题
- 在线求助Java习题
- 富有挑战性的题目:CVSLIENT 关于 中文文件下载后乱麻问题(800分赠送)
- Runtime.getRuntime().exec的问题
- JFrame对象被disposal后调用setVisible(ture)怎么会有能显示,怎样才能彻底释放JFrame的资源
- 求助冒泡程序(我用的是1.6的)
- 请高手帮帮忙,谢谢!
- 求输入一个字符串的最简单的办法?
- 谁用过jbuilder7-->Wizards-->Native Executable Builder 功能!?
- java中的Calendar如何使用
- windows的磁盘空间统计!用java语言
byte[] bs = str.getBytes("GBK");bs 里面就是!
public static String bytes2HexString(byte b) {
return bytes2HexString(new byte[] { b });
} public static String bytes2HexString(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
} public static void main(String[] args) throws UnsupportedEncodingException {
String str = "孙";
byte[] bs = str.getBytes("GB2312");
String s = "";
for (int i = 0; i < bs.length; i++) {
int a = Integer.parseInt(bytes2HexString(bs[i]), 16);
s += (a - 0x80 - 0x20) + "";
}
System.out.println(s);
}
取的是机内码
减 0x80 国际码
减 0x20 区位码
0xA1 - 0xA0 = 0x01 = 01 (2)(1)为区码,从 01~94,汉字分布在 16 至 87 区
(2)为位码,从 01~94再将 (1)*100 + (2) 就得到区位码了PS:汉字中最小的区位码就是“啊”字,从 1601 开始public class Test {
public static void main(String[] args) throws Exception {
String str = "啊";
int[] quwei = getQuwei(str);
for(int i : quwei) {
System.out.printf("%04d%n", i);
}
} public static int[] getQuwei(String str) throws Exception {
byte[] b = str.getBytes("gb2312");
int[] quwei = new int[b.length / 2];
for(int i = 0, k = b.length / 2; i < k; i++) {
quwei[i] = (((b[2 * i] - 0xA0) & 0xff) * 100) + ((b[2 * i + 1] - 0xA0) & 0xff);
}
return quwei;
}
}
2楼给的程序,str输入啊,得到的是160,非1601