FileOutputStream fo=new FileOutputStream("c:\\a.txt");
            DataOutputStream da=new DataOutputStream(fo);
            String c="浩";
            byte[] b=c.getBytes();
            da.writeChar(c.charAt(0));
            System.out.println(b[0]);
            System.out.println(b[1]);
            da.close();
这个程序把"浩"字写进a.txt,然后我用记事本打开a.txt,发现是mi
System.out.println得到的结果是-70和-58
-70和-58怎么也和mi联系不上啊,请问各位这到底是怎么一回事情

解决方案 »

  1.   

    FileWriter out=new FileWriter("a.txt");
    out.write("洁");
    out.flush();   //刷新缓冲区 是个好习惯
    out.close();   //好习惯 写进去FileReader in=new FileReader("a.txt");      //读出来

    char[]buf=new char[1024];  //注意不在是byte数组而是char树组
    int len=in.read(buf);
    System.out.println(new String(buf,0,len));
    in.close();有FileWriter 和 FileRader不用干吗用 FileOutputStream
      

  2.   

    c.getBytes()==》这儿因为你没有指定字符集,所以用缺省的字符集(GBK)编码,
    '浩'字的GBK编码是-70,-58da.writeChar(c.charAt(0))==》这儿写的是字符的unicode编码,'浩'的unicode编码是6d69你用记事本打开的时候,记事本会猜测文件的编码,这儿,记事本以为a.txt文件的编码是GBK
    所以,把6d69当作两个GBK字符来读,
    6d ==》m
    69 ==》i
      

  3.   

    既然没有分了,搂主自己就要多主动一点了,推荐一篇文章:
    http://www.regexlab.com/zh/encoding.htm