java.io寫文件在linux中出現中文亂碼之解決
時間 2020-10-02
標籤
java.io
java
文件
linux
出現
中文
亂碼
解決
昨天用java io寫個系統的操做日誌進txt文件時,遇到這麼個問題:在windows系統上測試過了,是沒問題的,可是放到服務器(linux系統)上寫到文件的中文都變成了亂碼!究其緣由,原來是這麼個狀況:linux下默認字符集是utf-8,而windows默認編碼是gbk,而java 往文件裏面寫入中文時是根據系統默認字符集來寫的。
最直接的辦法就是在使用java io寫文件時強制進行轉碼。最後是這樣寫的:
//獲得系統默認的encoding碼
String fileEncode = System.getProperty(
"file.encoding");
File outFile =
new File(ConfHelper.getConf(
"OperLogPath"));
OutputStreamWriter ow =
new OutputStreamWriter(
new FileOutputStream(outFile,
true), fileEncode);
String logStr =
"[" + DateUtil.formatDate(
new Date())
+
"]用戶Id=" + loginUser.getId() +
",用戶名稱="
+ loginUser.getUsername() +
" 修改彩繡類別 typeid="
+ typeid +
" 爲 [catgery=" + catgery +
",restype="
+ restype +
",ressubtype=" + ressubtype +
"]\r\n";
ow.write(
new String(logStr.getBytes(
"UTF-8"), fileEncode));
ow.close();
注意到有些資料說還有一種解決方案就是,修改linux的系統編碼字符集:
修改/etc/sysconfig/i18n 這個文件 將LANG="zh_CN.UTF-8"修改成: LANG="zh_CN.GBK" 保存並關閉,運行下面的命令使配置生效: shell> source /etc/sysconfig/i18n
可是,這就徹底改變了服務器的編碼,可能會引發其它效應,因此應慎重。我沒有嘗試,有須要的話,能夠一試。