字符串 与16进制字符串相互转换
下面代码是根据该博客:http://gufenglian.iteye.com/blog/348282,进行了完善后得出的。
public class TestUTF8 { public static void main(String... args) { //下面打印出所有的中文字符串 long start= 0x4E00; long end = 0x9FA5; do { System.out.println(toStringHex(Long.toHexString(start))); start++; } while (start < end); } public static String toHexString(String s){ String str=""; for (int i=0;i<s.length();i++){ int ch = (int)s.charAt(i); String s4 = Integer.toHexString(ch); if(s4.length()<4) /* * 当此处是[a-zA-Z0-9]等ascii值时, * 获得的16进制字符串长度小于4, * 如果不加上"00", * 在传入的字符串中即包含中文,又包含英文时, * 调用下面方法toStringHex无法得出正确的结果。 */ s4="00"+s4; str = str + s4; } System.out.println(str); return str; } /** * 转化十六进制编码为字符串 */ public static String toStringHex(String s){ byte[] baKeyword = new byte[s.length()/2]; for(int i = 0; i < baKeyword.length; i++){ try{ baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16)); }catch(Exception e){ e.printStackTrace(); } } try{ //中文占用了2个字节,此处必须用“utf-16”,否则无法正确获取中文字符 s = new String(baKeyword, "utf-16");//UTF-16le:Not }catch (Exception e1){ e1.printStackTrace(); } return s; } }?
?