String text = textpane.getText(); //textpane是一个JTextComponent textpane返回的是GB2312编码的字符串byte[] bytes = null;
try {
bytes = text.getBytes("GB2312"); //使用GB2312字符集将text解码为字节序列,将结果存储到bytes中
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
}
String hexstr = ""; //hexstr 是bytes转换成十六进制字符串的集合
for(int i=0; i<bytes.length; i++){ //组成hexstr 的过程
hexstr = hexstr.concat(Integer.toHexString(bytes[i])+" ");
}
这里面有两个问题让我困扰,我希望的是bytes 数组的每个byte 都能转换成像 FF D8 9E 这样的字符串,但不理想的是textpane 里面的文本很杂乱 有数字,字母,汉字,回车.数字和字母还不错,得到的是正确的十六进制编码. 但回车得到的就只有一个 a 还有汉字得到的有很多都是五六个F加正确的编码 像 "ffffff3b",我截取了返回带有F的byte 发现都是负数,这难道是java 的缺陷吗? 谁能给我解释解释. 还有在GB2312里数字和回车 是怎么编码的 , 我知道空格是"20"
try {
bytes = text.getBytes("GB2312"); //使用GB2312字符集将text解码为字节序列,将结果存储到bytes中
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
}
String hexstr = ""; //hexstr 是bytes转换成十六进制字符串的集合
for(int i=0; i<bytes.length; i++){ //组成hexstr 的过程
hexstr = hexstr.concat(Integer.toHexString(bytes[i])+" ");
}
这里面有两个问题让我困扰,我希望的是bytes 数组的每个byte 都能转换成像 FF D8 9E 这样的字符串,但不理想的是textpane 里面的文本很杂乱 有数字,字母,汉字,回车.数字和字母还不错,得到的是正确的十六进制编码. 但回车得到的就只有一个 a 还有汉字得到的有很多都是五六个F加正确的编码 像 "ffffff3b",我截取了返回带有F的byte 发现都是负数,这难道是java 的缺陷吗? 谁能给我解释解释. 还有在GB2312里数字和回车 是怎么编码的 , 我知道空格是"20"
System.out.println((int)'\r');
你的bytes[i]转换char的方法我试过了,结果是返回的六个F都变成了2个了,怎么能彻底让它没有呢?
还有我在UltraEdit-32里看到回车十六进制是0D 0A 空格是 20 是怎么回事呀?
火龙果的方法是很好,但是如果我要是还想反转的话就有点麻烦了.
我就希望Integer.toHexString() 能够得到正确的十六进制字符串
再考虑通过一些方法将这些字符串转回汉字
我以前也遇到了类似的问题