java outputstream乱码_OutputStream 输出有乱码

我刚才试过了, 如果你是写文件, 并且是写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无法指定文件编码

...请追问, 超出输入长度限制了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值