錯誤原因:經過調試,發現是文件內容元編碼與不同操作系統文件編碼相互衝突導致的,對操作系統不太熟悉,估計是當時的開發環境的Window系統是GBK的,而部署環境的Linux操作系統是UTF-8的。
解決方式:大概來看,在傳遞到ACTION中正常的中文內容,在Windows下寫入的流和文件的編碼都設置爲GBK、Linux下都設置爲UTF-8可以避免亂碼問題(保存的文件編碼與操作系統的一致).另外,一個統一的解決方法是,文件寫入流使用FileOutputStream而不使用FileWriter
...
OutputFormat format = OutputFormat.createPrettyPrint();
FileOutputStream fos = new FileOutputStream(fileURL);
XMLWriter writer = new XMLWriter(fos, format);
...
//以下的方式在不同的操作系統下有差異,會出現亂碼
//OutputFormat format = OutputFormat.createPrettyPrint();
//format.setEncoding("UTF-8");
//XMLWriter writer = new XMLWriter(new FileWriter(new File(fileURL)),format);
...
一些詳細的測試見附件。
小結:這個屬於文件源編碼與操作系統文件編碼的問題,如果內容編碼與操作系統的編碼不一致就會出現亂碼。FileOutputStream類的接口估計是使用當前操作系統默認的文件編碼,具有教好的可移植性