没明白,再发一遍,帮看看,卡这儿了OutputStreamWriter osw=
    new OutputStreamWriter(new FileOutputStream("1.txt",true),"UTF-8");
//创建使用指定字符集的 OutputStreamWriter,意思是不是将流中的内容以UTF-8的编码形式写入文件1.txt中?
//然后1.txt这个文件的文件编码就是UTF-8?
osw.write(System.getProperty("line.separator"));
osw.write("Mircosoft IBM Sun Apple Hp");
System.out.println(osw.getEncoding());
//打印的是utf-8;
//但1.txt文件用emeditor或者IE打开怎么显示的是GB2312?
还有,默认不指定字符编码的情况下System.out.println(osw.getEncoding());打印的是GBK;
怎么用emeditor或者IE打开显示的还是GB2312?

解决方案 »

  1.   

    "UTF-8"给定字符集编码器  可能和文件的编码方式不同吧。 
      

  2.   

    编辑工具获取的字符集编码是不准确的,文本中的内容越多,工具猜对编码的可能性就越大,UTF-8和GBK对英文的编译是相同的吧。
    你的方法没有错。
      

  3.   


    1:你输入的“的确”是 UTF-8 编码后的字节。因为: new OutputStreamWriter(new FileOutputStream("1.txt",true),"UTF-8");2: 你输入的都是“英文字母”或者说是都是 ASCII 字符。对于 ASCII 字符,使用 UTF-8 或 GB2312 进行编码后得到的都是相“同的字节”。
    3:关键:应用程序(例如你所用的 IE 和 emeditor)如何判断 1.txt 中保存的数据到底是 GB2312 还是 UTF-8 ,各个应用程序的判断方式是不同的。因为你输入的都是 ASCII 所以,应用程序出现了错误的判断。如果你写入的数据中有中文,这些应用程序将不会出错误。
      

  4.   

    给你个例子,便于理解。
       你手写一个 .txt 文件。在其中只写一个字母 a 。然后将这文件另存为 UTF-8 格式。你用 FileInputStream 读这个文件,并打印出读到的字节。你会发现读到的字节数组中的内容是“-17, -69, -65, 97” 97 就是你写的 a 。而前面的 -17, -69, -65 就是 windows 为了区别 .txt 文件是什么编码格式所加上的内容(UTF-8 格式就会在文件头部保存这几个字节)。
       
      

  5.   

    你在新建一个 .txt 文件。新建的文件应该是 ANSI 编码格式(你要确定一下。用文件另存为确认即可),如果你用的是简体中文的 Windows 那么,ANSI 就是 GBK 。此时你将文件中输入“联通”两个字。然后保存。
       1:重新打开这个文件,你能看到什么?
       2:此时这个文件的编码格式是什么(用文件另存为看)?
       3:你用程序操作一下,对“联通”两个字进行“UTF-8”编码后,你得到了什么结果
       4:为什么使用记事本打开这个保存有“联通”两个字的文件会出现这个结果?
      

  6.   

    看看你计算机的默认编码是什么?
    System.out.println(System.getProperty("file.encoding"));
      
      

  7.   

    谢谢你,按照你说的确实如此,如果输入有中文,另存为,此时1.txt的编码默认的就是UTF-8;用emeditor打开右下角显示的也是UTF-8,只不过用IE打开用的编码还是GB2312
      

  8.   


    /*给你个例子,便于理解。
      你手写一个 .txt 文件。在其中只写一个字母 a 。然后将这文件另存为 UTF-8 格式。你用 FileInputStream 读这个文件,并打印出读到的字节。你会发现读到的字节数组中的内容是“-17, -69, -65, 97” 97 就是你写的 a 。而前面的 -17, -69, -65 就是 windows 为了区别 .txt 文件是什么编码格式所加上的内容(UTF-8 格式就会在文件头部保存这几个字节)。*///按你说的步骤做了,
    import java.io.*;
    public class TestUTF8{
      public static void main(String args[])throws FileNotFoundException,IOException{
         int c=0;
         InputStream is=new FileInputStream("1.txt");
         while((c=is.read())!=-1){
             System.out.print(c+" ");
         }
      }
    }
    //结果是  239 187 191 97?,怎么不是“-17, -69, -65, 97”?
      

  9.   


    1:你输入的“的确”是 UTF-8 编码后的字节。因为:
    new OutputStreamWriter(new FileOutputStream("1.txt",true),"UTF-8");
    2: 你输入的都是“英文字母”或者说是都是 ASCII 字符。对于 ASCII 字符,使用 UTF-8 或 GB2312 进行编码后得到的都是相“同的字节”。
    3:关键:应用程序(例如你所用的 IE 和 emeditor)如何判断 1.txt 中保存的数据到底是 GB2312 还是 UTF-8 ,各个应用程序的判断方式是不同的。因为你输入的都是 ASCII 所以,应用程序出现了错误的判断。如果你写入的数据中有中文,这些应用程序将不会出错误。谢谢你,按照你说的确实如此,如果输入有中文,另存为,此时1.txt的编码默认的就是UTF-8;用emeditor打开右下角显示的也是UTF-8,只不过用IE打开用的编码还是GB2312
      

  10.   

    你读出来的是 int 啊,而我说的是 byte~~
    你这么读:FileInputStream fileInputStream = new FileInputStream("1.txt");
    byte[] a = new byte[4];//因为我知道读出来的肯定是 4 个字节,所以我这里简要的写了。正常你情况下不能这样的,你要需要一个 byte[] 作为缓冲区。如果不知道在网上找找。这里你可别误会啊。
    fileInputStream.read(a);
    fileInputStream.close();
    System.out.println(Arrays.toString(a));
      

  11.   


    你在新建一个 .txt 文件。新建的文件应该是 ANSI 编码格式(你要确定一下。用文件另存为确认即可),如果你用的是简体中文的 Windows 那么,ANSI 就是 GBK 。此时你将文件中输入“联通”两个字。然后保存。
      1:重新打开这个文件,你能看到什么?
      //为什么输入联通显示的是乱码?
      2:此时这个文件的编码格式是什么(用文件另存为看)?
      //自动变为UTF8?而输入其他中文是默认的ANSI 编码格式?
      3:你用程序操作一下,对“联通”两个字进行“UTF-8”编码后,你得到了什么结果
      //可以往里面输入正确结果啊?
      4:为什么使用记事本打开这个保存有“联通”两个字的文件会出现这个结果?
      //不知道,没注意过麻烦再来解答一下,楼上的也是我,另一个号谢谢了,没弄明白
      

  12.   

    如果你是这样操作的:OutputStreamWriter osw=
        new OutputStreamWriter(new FileOutputStream("1.txt",true),"UTF-8");
    osw.write("中文");如果你用 IE 打开,其编码如果是 GBK 那么,你看到的肯定不是 “中文”两个字,而是乱码。你只有将 IE 设置为以“UTF-8” 读取,那么它才不会乱码。
        1:你如果你是通过 Java 代码写的 1.txt ,而是通过手动的“新建一个 1.txt -- 录入 ‘中文’ 两个字 -- 文件另存为 UTF-8 格式(覆盖原来的 1.txt)。” 然后你用 IE 打开 1.txt 肯定不是乱码,而且查看其编码格式为“UTF-8”。因为,你在“另存为”时,选择了 UTF-8 。此时 Windows 或在文件的头部写入 “-17, -69, -65”这几个字节,以标识该文件为 UTF-8 格式(windows 中的很多程序就是通过判断文件的开始是否存在这几个字节来判断出文件是否为 UTF-8 格式,当然也不是所有的 windows 程序都去这么判断)。当用 IE 打开这个文件时,因为它看到了 “-17, -69, -65” 这几个字节,所以它就能够判断出该文件时 "UTF-8" 编码的。
        2:如果你是用 Java 程序写 1.txt(用 UTF-8 的编码写),而通常并不会加上“-17, -69, -65”这几个字节(也不应该加上)。所以写出来的文件 Windows 下的一些程序例如 IE 就不能判断出其是一个 utf-8 格式的文件,(而是认为其是 GBK 格式的文件)所以出现乱码。但是有一些 Windows 程序在读取有多字节字符的文件时,并不“仅仅”凭借开头是否有“-17, -69, -65”几个字节来判断该文件是否为 UTF-8 格式。例如 Windows 的记事本程序。它的判断逻辑应该是:首先判断文件的开头是否有“-17, -69, -65”这几个字符。如果有认为该文件时 UTF-8。如果没有且文件中存在多字节字符,如中文字符,此时它又另有算法来判断该文件是 UTF-8 还是 GBK 。
     OVER 吃饭..
      

  13.   

    关于这个问题,看来我是画蛇添足了。
    我说这个的目的是希望你能理解:“应用程序(例如你所用的 IE 和 emeditor)如何判断 1.txt 中保存的数据到底是 GB2312 还是 UTF-8 ,各个应用程序的判断方式(可能)是不同的。”也就是说,虽然通过 java 使用 utf-8 写了一个文件。但另外一个应用程序在读这个文件的时候它不会知道你写的时候用的是什么编码。对于该文件的编码它只能凭借自己的“判断”而得出结论。
    既然说到这个问题~~~给你个链接自己看下吧~~~这个我没有自己的总结,所以随便 Google 了下。
    http://www.u6u8.net/blog/article.asp?id=874