java.io寫文件在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
可是,這就徹底改變了服務器的編碼,可能會引發其它效應,因此應慎重。我沒有嘗試,有須要的話,能夠一試。