java--解决文件输出流保存内容无中文时文件编码为ANSI格式不是utf-8

java使用流写出文件时,即使指定了utf-8文件格式,但是如果内容中没有中文,编码会自动改为ansi格式。


生成的代码如下:

public static void saveFile(String file, String data, boolean append) throws IOException {  
      BufferedWriter bw = null;  
      OutputStreamWriter osw = null;  
          
      File f = new File(file);  
      FileOutputStream fos = new FileOutputStream(f, append);  
      try {  
         // write UTF8 BOM mark if file is empty  
         if (f.length() < 1) {  
            final byte[] bom = new byte[] { (byte)0xEF, (byte)0xBB, (byte)0xBF };  
            fos.write(bom);  
         }  
  
         osw = new OutputStreamWriter(fos, "UTF-8");  
         bw = new BufferedWriter(osw);  
         if (data != null) bw.write(data);  
      } catch (IOException ex) {  
         throw ex;  
      } finally {  
         try { bw.close(); fos.close(); } catch (Exception ex) { }  
      }  
   } 


另外,输出的utf8文件中中文是乱码,需要考虑2点,一是输出,是否指定了正确的输出格式。二是输入是否按照正确的文件格式去解析了文件。

比如,读一个utf8文件,然后写出另一个utf8文件


         File rst01 = new File("a.txt");
         File rst02 = new File("b.txt");

         InputStreamReader isr = new InputStreamReader(new FileInputStream(rst01), "UTF-8");
         BufferedReader reader = new BufferedReader(isr);
         OutputStreamWriter writerStream = new OutputStreamWriter(new FileOutputStream(rst02),"UTF-8");
         BufferedWriter writer = new BufferedWriter(writerStream);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值