我刚才试过了, 如果你是写文件, 并且是写char(就是用Writer), 那么默认编码一定是系统的默认编码, 即ANSI, 也就是GBK, 不论你工程是不是UTF8编码
你现在是有一个字节流, 这个字节流用GBK编码后显示的是正确的字符(中文), 你现在要把这些字符(中文)存入到一个xml文件中
方法
1. 直接写字节流, 就是用Stream的方式写文件, 因为是字节流, 所以这里面没有任何编码问题, 也就是说, 你直接把这个可以用GBK编码得到正确中文的字节流直接写入文件, 这样, 只要你文件是GBK编码, 那么, 你打开这个文件就是正确的中文
如果你要这样做可以这样写
InputStream br = con.getInputStream();
int b;
OutputStream out=new FileOutputStream(new File("D:"+File.separator+"test"+File.separator+"output.xml"),true);
while((b=br.read())!=-1){
out.write((byte)temp);
}
out.flush();
out.close();
br.close();
这样下来的话, 你用记事本, 即系统默认的编码打开xml文件, 肯定是中文, 不会有问题, 如果你是用eclipse打开xml文件, 因为eclipse中有配置默认的打开编码, 所以如果这个默认编码不是GBK, 那么就是乱码, 从你的描述中似乎你eclipse默认是UTF8的, 所以打开就是乱码, 你可以试试
2. 写字符, 用Writer的方式写文件, 因为一牵扯到字符, 就会有编码的东西要考虑, 所以要注意编码
还是按你上面所写的, 你先写了一个Reader, 用GBK的方式读字符, 因为你说你的字节流是正确的, 所以
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"GBK"));
int temp=0;
此时用temp = br.read(); 实际读出的是一个字符(中文), 这个字符是正确的, 不是乱码, 你要把字符写入文件, 就要用Writer来写, 而不是用Stream来写, 可以用下面的方式
FileWriter fw = new FileWriter(new File("D:"+File.separator+"test"+File.separator+"output.xml"),true);
while((temp=br.read())!=-1){
out.write((char)temp);
}
out.flush();
out.close();
br.close();
这样其实还是ANSI编码写文件, 同理用记事本打开中文正常, 如果用eclipse默认编码UTF8乱码
如果你想用eclipse默认UTF8编码打开是正确的中文, 你就要把char转成UTF8编码的字节写入文件, 就是用下面的方式, 此时不能用FileWriter, 因为FileWriter无法指定文件编码
...请追问, 超出输入长度限制了