有这样的字符串 \u767b\u5f55\u540d
如果用System.out.println()打直接打印出来的话是 :登录名
   
但是把它放在一个文件中,用BufferedReader 的readLine()把它读出来,再用System.out.println()打印出来,结果还是\u767b\u5f55\u540d
   这是为什么?????如何才能使从文件中读出也显示中文???

解决方案 »

  1.   

    "\u767b\u5f55\u540d" 写成 java 文件,实际上等同于 "登录名"
    在 java 源代码中,引号中的反斜杠代表转义字符。而把 \u767b\u5f55\u540d 写入文件,则相当于 "\\u767b\\u5f55\\u540d",反斜杠只代表反斜杠字符。这就类似于 "\n"更多概念:
    http://www.regexlab.com/zh/encoding.htm
      

  2.   

    谢谢楼上,解决法如下:
    class T1{

    public static void main(String[] args) throws Exception{
    String str="";
    BufferedReader br=new BufferedReader(
    new FileReader("f:\\application.properties"));
    char buffer[]=new char[100];
    while((str=br.readLine())!=null){

    String str1=T1.loadConvert(str.toCharArray(),0,str.length(),buffer);
    System.out.println(str1);

    }
    }

        private static  String loadConvert (char[] in, int off, int len, char[] convtBuf) {
            if (convtBuf.length < len) {
                int newLen = len * 2;
                if (newLen < 0) {
            newLen = Integer.MAX_VALUE;
        } 
        convtBuf = new char[newLen];
            }
            char aChar;
            char[] out = convtBuf; 
            int outLen = 0;
            int end = off + len;        while (off < end) {
                aChar = in[off++];
                if (aChar == '\\') {
                    aChar = in[off++];   
                    if(aChar == 'u') {
                        // Read the xxxx
                        int value=0;
        for (int i=0; i<4; i++) {
            aChar = in[off++];  
            switch (aChar) {
              case '0': case '1': case '2': case '3': case '4':
              case '5': case '6': case '7': case '8': case '9':
                 value = (value << 4) + aChar - '0';
         break;
      case 'a': case 'b': case 'c':
                              case 'd': case 'e': case 'f':
         value = (value << 4) + 10 + aChar - 'a';
         break;
      case 'A': case 'B': case 'C':
                              case 'D': case 'E': case 'F':
         value = (value << 4) + 10 + aChar - 'A';
         break;
      default:
                                  throw new IllegalArgumentException(
                                               "Malformed \\uxxxx encoding.");
                            }
                         }
                        out[outLen++] = (char)value;
                    } else {
                        if (aChar == 't') aChar = '\t'; 
                        else if (aChar == 'r') aChar = '\r';
                        else if (aChar == 'n') aChar = '\n';
                        else if (aChar == 'f') aChar = '\f'; 
                        out[outLen++] = aChar;
                    }
                } else {
            out[outLen++] = (char)aChar;
                }
            }
            return new String (out, 0, outLen);
        }
    }其中,loadConvert()方法是在java.util.Properties中