问个java字符编码的问题,中文字符用utf8编码,我直接System.out.println("\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7")能够在控制台上打印正出中文来,但是如果\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7在文件中,从文件中读出来再在控制台输出,则输出的还是\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7,若要从文件中读出的时候也能够正确显示其代表的中文字符,该如何处理?

解决方案 »

  1.   

    答:当在程序中的字符串"\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7"表示时,\u5e7f其实在机器内部是一个UNICODE值(不是由这6个字符组成的串)。而文本文件中的\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7,其\u5e7f就不是一个UNICODE值,而是由这6个字符组成的串。因此需要转换。
    转换的方法代码参考如下:public static String convert(String utfString)
    {
       StringBuilder sb = new StringBuilder();
       int i=-1;
       int pos=0;
       while((i=utfString.indexOf("\\u",pos))!=-1)
       {
       sb.append(utfString.substring(pos,i));
       if(i+5<utfString.length())
       { 
       pos=i+6;
       sb.append((char)Integer.parseInt(utfString.substring(i+2,i+6),16));
       }//if
       }//while
       return sb.toString();
    }用该方法测试的结果如下:
    若:文本文件中的串是:ab\u5e7fdd\u5ddeew\u5e02qq\u531721\u4eac\u8def39\u53f7
    则:结果是:ab广dd州ew市qq北21京路39号以上仅供你参考
      

  2.   

    \u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7
    请问怎样能查到这些码?
    或怎样把中文字符转成这种UNICODE码?
    谢谢
      

  3.   

    代码中的unicode码,在编译的时候,就被会自动转换成相应的字符。(亲爱滴火龙果告诉我滴。。
    所以System.out.println("\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7")
    在编译的时候,就被转换成了:
    System.out.println("广州市北京路39号");
    而如果写在了文件里,那在读的时候,\ 会自动转换为\\
    也就是,实际读取出来的是:
    \\u5e7f\\u5dde\\u5e02\\u5317\\u4eac\\u8def39\\u53f7所以输出的时候,看到的是文件里保存的字符串,"广州市北京路39号"
      

  4.   

    上面少打了一句话。而如果写在了文件里,那在读的时候,\ 会自动转换为\\ 
    也就是,实际读取出来的是: \\u5e7f\\u5dde\\u5e02\\u5317\\u4eac\\u8def39\\u53f7
    所以输出的时候,看到的是文件里保存的字符串, 而不是
    "广州市北京路39号
      

  5.   


    文件个java程序里对这个字符的认识不一样,文件里的认为它是字符串!但是在java里\xxxx是unicode,不再认为是字符串,你真的要输出这个字符串的话这样写!
    System.out.println("\\u5e7f\\u5dde\\u5e02\\u5317\\u4eac\\u8def39\\u53f7");
    就像正则表达式里的一样,你要打印出'\',应该System.out.println("\\");
    因为\认为是转义符!