使用System.out.println("\u6C49");可以输出一个汉字但是现在这个\u6C49是存放在一个文件中的
我通过读取文件,把他放到一个字符串中
再次System.out.println(str)的时候,出来的是\u6C49这个没有转换的字符串我想知道,怎么处理才能输出汉字!

解决方案 »

  1.   

    看看这样行不。        //System.out.println("\u6C49");
            FileOutputStream fos = new FileOutputStream(new File("D:/1.txt"));
            OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
            BufferedWriter bw = new BufferedWriter(osw);
            bw.write("\u6C49");
            bw.write("\u6C49");
            bw.write("\u6C49");
            bw.close();        FileInputStream fis = new FileInputStream(new File("D:/1.txt"));
            InputStreamReader osi = new InputStreamReader(fis, "UTF-8");
            BufferedReader br = new BufferedReader(osi);
            String str = null;
            while ((str = br.readLine()) != null)
            {
                System.out.println(str);
            }
        }
      

  2.   

    嗯 对 是编码的问题 4楼的可以解决问题不过我很纳闷 为什么用记事本保存的时候保存成UTF-8编码 然后再用UTF-8编码读还是乱码呢
      

  3.   

    字符串中的\u与java中的\u是不一致的。字符串中的其实是\\u两部分\\和u,而java中\u是一个整体表示unicode码。
      

  4.   

    说的有点晦涩了。我说的字符串是指你通过读取文件读出来的字符串。简言之,就是文件的\u与java中的\u是不一样的。
      

  5.   

    既然你的:System.out.println("\u6C49");可以输出一个汉字那么:
    string str = "\u6C49";
    System.out.println(str);
    这样也应该可以。如果可以,那按道理你的从文件中取数据方法是对的啊!
      

  6.   

    恩,四楼的可以解决,我试了!
    代码如下:import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;public class Test {
    public static void main(String[] args) throws IOException {
            FileOutputStream fos = new FileOutputStream(new File("D:/1.txt"));
            OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
            BufferedWriter bw = new BufferedWriter(osw);
            bw.write("\u6C49");
            bw.close();        FileInputStream fis = new FileInputStream(new File("D:/1.txt"));
            InputStreamReader osi = new InputStreamReader(fis, "UTF-8");
            BufferedReader br = new BufferedReader(osi);
            String str = null;
            while ((str = br.readLine()) != null)
            {
                System.out.println(str);
            }
        }
    }
    输出结果:汉 
    连文件中的\u6C49也变成了  汉 。OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
    中的"UTF-8"是文件的编码类型,这里是根据文件编码填写。
      

  7.   

    看了看Properties的源代码,里面有解析\u的方法,下面是一个小测试:import java.io.*;
    public class unicodeTest{
        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);
        }
        public static void main(String rags[])throws Exception{
     BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("1.txt")));
     //1.txt里面的内容是\u4e2d\u534e\u4eba\u6c11\u5171\u548c\u56fd
                     //代表的中文是:中华人民共和国
     String line="";
     while((line=br.readLine())!=null){
         char[] convtBuf=new char[7];
         System.out.println(loadConvert(line.toCharArray(),0,42,convtBuf));
     }
     br.close();
    }
    }