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  "]rn"

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但是,这就完全改变了服务器的编码,可能会引起其它效应,应慎重.我没有尝试,有需要的话,可以一试.


For exapmle:
   Test.java 
     public class Test{                                                          
                  public static void main(String[ ] args){
                        System.out.println("Hello World! 这位是王疯子!");
                 }                                                                          

 

在linux终端进行编译时,出现以下乱码:
    # javac Test.java
         Test.java: 5: warning: unmappable character for encoding ASCII
                 System.out.println("Hello World! ?????????!");
         ...............................
         12 warning.
       # java Test
        Hello World! ??????????!

Analysis:  
      1、这种是系统的环境变量设置问题:修改/etc/profile文件里的语言问题。
         不能解决问题。
      2、怀疑该文件Test.java的编码问题
      3、怀疑操作系统语言问题

Solutions:
第一种:
    在进行javac编译时,加上编码:
         # javac -encoding gbk  Test.java        # 编译成功
    但是,执行  # java Test ,产生的结果还是乱码: Hello World! ?????????!
第二种:
    linux 操作系统登陆时,以 USA English为默认语言登陆。
    然后打开新的终端来执行javac 和java。执行成功。
    # javac Test.java
        # java Test
        Hello World! 这位是王疯子!

PS:
    类似的linux乱码均可以通过此方法来操作。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值