日期:2014-05-16  浏览次数:20602 次

java.io写文件在linux中出现中文乱码的解决

昨天用java io写个系统的操作日志进txt文件时,遇到这么个问题:在windows系统上测试过了,是没问题的,但是放到服务器(linux系统)上写到文件的中文都变成了乱码!究其原因,原来是这么个情况:linux下默认字符集是gbk,而windows默认编码是utf-8,而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
但是,这就完全改变了服务器的编码,可能会引起其它效应,所以应慎重。我没有尝试,有需要的话,可以一试。