java在linux系统下文件夹出现中文乱码的问题

来源:互联网 发布:淘宝店怎么运营起来 编辑:程序博客网 时间:2024/06/05 20:52
用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乱码均可以通过此方法来操作。


0 0
原创粉丝点击