FileWriter不能寫utf-8的原因及解決
阿新 • • 發佈:2019-01-23
/*
* Copyright 2007 nuaa. All rights reserved.
* This file is by yethyeth, 2007-9-3 9:27:34.
*/package cn.yethyeth.sample.io;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
// TODO: Auto-generated Javadoc
/***//**
* 本檔名為FileWriterSubstituteSample,實際上是在尋找FileWriter的替代者。
* 因為FileWriter在寫檔案的時候,其編碼方式似乎是System.encoding或者System.file.encoding(已經證明FileWriter和FileReader確實使用系統當前預設的編碼方式,更多資訊包括FileReader的詳見http://www.javapractices.com/Topic42.cjp),
* 在中文win下encoding基本是gb2312,在en的win下基本是iso-8859-1,總之不是utf-8。
* 所以要建立一個utf-8的檔案,用FileWriter是不行的。(FileWriter和FileReader都不支援通過引數指定編碼方式,而OutputStreamWriter和InputStreamReader可以。這兩個類從名字上就可以看到是位元組流和字元流的組合,實際上也是連線兩者的橋樑 )。 目前不知道如何更改其用來寫檔案的編碼方式,因此對於建立utf-8檔案使用如下方式來代替。
*
* 參見:
* http://www.malcolmhardie.com/weblogs/angus/2004/10/23/java-filewriter-xml-and-utf-8/*/publicclass FileWriterSubstituteSample {
/**
* The main method.
*
* @param args
* the arguments
*/publicstaticvoid main(String[] args){
String path ="cn/yethyeth/sample/resources/XML_UTF-8.xml";
try {
OutputStreamWriter out =new OutputStreamWriter(new FileOutputStream(path),"UTF-8");
out.write("<?xml version=/"1.0/" encoding=/"utf-8/"?><a>這是測試。</a>");
out.flush();
out.close();
System.out.println("success...");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block e.printStackTrace();
} catch (IOException e){
// TODO Auto-generated catch block e.printStackTrace();
}
}
}
* Copyright 2007 nuaa. All rights reserved.
* This file is by yethyeth, 2007-9-3 9:27:34.
*/package cn.yethyeth.sample.io;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
// TODO: Auto-generated Javadoc
/***//**
* 本檔名為FileWriterSubstituteSample,實際上是在尋找FileWriter的替代者。
* 因為FileWriter在寫檔案的時候,其編碼方式似乎是System.encoding或者System.file.encoding(已經證明FileWriter和FileReader確實使用系統當前預設的編碼方式,更多資訊包括FileReader的詳見http://www.javapractices.com/Topic42.cjp),
* 在中文win下encoding基本是gb2312,在en的win下基本是iso-8859-1,總之不是utf-8。
* 所以要建立一個utf-8的檔案,用FileWriter是不行的。(FileWriter和FileReader都不支援通過引數指定編碼方式,而OutputStreamWriter和InputStreamReader可以。這兩個類從名字上就可以看到是位元組流和字元流的組合,實際上也是連線兩者的橋樑
*
* 參見:
* http://www.malcolmhardie.com/weblogs/angus/2004/10/23/java-filewriter-xml-and-utf-8/*/publicclass FileWriterSubstituteSample {
/**
* The main method.
*
* @param args
* the arguments
*/publicstaticvoid main(String[] args){
String path
try {
OutputStreamWriter out =new OutputStreamWriter(new FileOutputStream(path),"UTF-8");
out.write("<?xml version=/"1.0/" encoding=/"utf-8/"?><a>這是測試。</a>");
out.flush();
out.close();
System.out.println("success...");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block e.printStackTrace();
} catch (IOException e){
// TODO Auto-generated catch block e.printStackTrace();
}
}
}