我从网上找到一段转unicode的程序,如下
private String convert(String str) {
String tmp;
StringBuffer sb = new StringBuffer(1000);
char c;
int i, j;
sb.setLength(0);
for (i = 0; i < str.length(); i++) {
c = str.charAt(i);
if (c > 255) {
sb.append("\\u");
j = (c >>> 8);
tmp = Integer.toHexString(j);
if (tmp.length() == 1)
sb.append("0");
sb.append(tmp);
j = (c & 0xFF);
tmp = Integer.toHexString(j);
if (tmp.length() == 1)
sb.append("0");
sb.append(tmp);
} else {
sb.append(c);
}
}
return (new String(sb));
}另外在main函数中调用该method,
String china = convert("中国");
System.out.println(china);
控制台中得到的信息是\u4e2d\u56fd
我又添加了如下代码
String mychina= "\u4e2d\u56fd";
System.out.println(mychina);
为什么控制台得到的信息时“中国”?
如果我想将conver方法打印出来的信息也是“中国”,我该如何处理?

解决方案 »

  1.   

    第一次输出的是\u4e2d\u56fd 这样一个字符串
    后面输出的\u4e2d\u56fd 表示的两个字符
      

  2.   

    private static String deConvert(String str) {
        StringBuffer sb = new StringBuffer(1000);
        char c = 0;
        for (int i = 0; i < str.length(); i++) {
            c = str.charAt(i);
            if ('\\' == c && 'u' == str.charAt(i + 1) && str.length() > i + 5) {
            sb.append((char) ((Integer.parseInt(
                str.substring(i + 2, i + 4), 16) << 8) + Integer
                .parseInt(str.substring(i + 4, i + 6), 16)));
            i = i + 5;
            } else {
            sb.append(c);
            }    }    return sb.toString();
        }能转大部分吧,但是
    String china = convert("a中a国\\u1234");
    System.out.println(china);
    System.out.println(deConvert(china));
    这样的\u1234就完蛋了,原因与那个convert方法有关。