Java FileWriter中文乱码

来源:互联网 发布:手机淘宝发截图给客服 编辑:程序博客网 时间:2024/05/19 06:19

Java FileWriter中文乱码


原文:http://www.malcolmhardie.com/weblogs/angus/2004/10/23/java-filewriter-xml-and-utf-8/ 

Java FileWriter默认是用(ISO-8859-1 orUS-ASCII)西方编码的,总之不是UTF-8的,而FileWriter类有getEncoding方法,却没有setEncoding的方法,如下的写法可以使正确输出UTF-8的文件: 
OutputStreamWriter out = newOutputStreamWriter(newFileOutputStream(path),"UTF-8"); 
或者 
Writer out = new BufferedWriter( newOutputStreamWriter(newFileOutputStream(this.outputFilename),”UTF-8″));

--------------------------------------------------

 最近在做HTML静态生成,需要从硬盘上把模版文件的内容读出来。然后,替换相关标签写到指定的文件中。无论是读写,都遇到了中文乱码问题。试过多种方法,发现下面一种可以避免中文乱码。(无论读取还是写入一定要进行编码转换。)

1、JAVA读取文件,避免中文乱码。

 
 public static String readFile(StringfilePathAndName) {
  String fileContent = "";
  try{  
   File f = newFile(filePathAndName);
   if(f.isFile()&&f.exists()){
    InputStreamReaderread = new InputStreamReader(new FileInputStream(f),"UTF-8");
    BufferedReaderreader=new BufferedReader(read);
    Stringline;
    while((line = reader.readLine()) != null) {
     fileContent+= line;
      
    read.close();
   }
  } catch (Exception e) {
   System.out.println("读取文件内容操作出错");
   e.printStackTrace();
  }
  return fileContent;
 }

2、JAVA写入文件,避免中文乱码。

 public static void writeFile(StringfilePathAndName, String fileContent) {
  try {
   File f = newFile(filePathAndName);
   if(!f.exists()) {
    f.createNewFile();
   }
   OutputStreamWriterwrite = new OutputStreamWriter(newFileOutputStream(f),"UTF-8");
   BufferedWriterwriter=newBufferedWriter(write);   
   //PrintWriterwriter = new PrintWriter(new BufferedWriter(newFileWriter(filePathAndName)));
   //PrintWriterwriter = new PrintWriter(new FileWriter(filePathAndName));
   writer.write(fileContent);
   writer.close();
  } catch (Exception e) {
   System.out.println("写文件内容操作出错");
   e.printStackTrace();
  }
 }

我试过写入的时候用

1、PrintWriter writer = new PrintWriter(new BufferedWriter(newFileWriter(filePathAndName)));

2、PrintWriter writer = new PrintWriter(newFileWriter(filePathAndName));

都不行。

以上代码经过运行可以避免中文乱码,关键是要编码转换。

0 0