posts - 36, comments - 419, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

JAVA 不同区域服务器引起的乱码解决。

Posted on 2009-10-24 23:03 BearRui(AK-47) 阅读(3007) 评论(5)  编辑  收藏 所属分类: Java

问题:
            项目在本机开发编译打包后发布到法国的服务器,代码中的中文全部乱码,就算是最简单的代码System.out.println("中文"),打印出来的也是乱码。

      代码在本地的服务器测试都正常。

      法国服务器的环境:window 2003 中文版。

解决:

           在网友imasmallbird的指引下,发现是2个服务器的file.encoding的不同,本地服务器是GBK,而法国服务器是Cp1252,所以会产生乱码。

   把法国服务器的区域设置改成中国后,file.encoding就变成GBK,这样可以解决这个问题,但因为很多原因不能直接改区域设置,比如改了区域设置后时间就不是法国时间。

   目前解决办法如下:
          1. 本地编译打包不用变,本地编译采用的是GBK编译的(默认采用系统字符集编译)

          2. 在法国服务器的tomcat上加上JAVA的启动参数 -Dfile.encoding=GBK

重启tomcat,一切正常了。

解决了该问题后,顺便找了些JAVA的中文乱码的资料看了下,简单的总结下:

       从Java 源代码到得到正确的结果,要经过 “Java 源代码-> Java 字节码-> 虚拟机->操作系统->显示设备”的过程。在上述过程中的每一步骤,我们都必须正确地处理中文的编码,才能够使最终显示正确的结果。

       "Java 源代码-> Java 字节码":该阶段就是调用javac 进行编译的阶段,javac默认采用系统字符集,比如我们本地机器急就是GBK,如果想用其他的编码,比如UTF-8,可以加上 -encoding UTF-8

      "Java 字节码-> 虚拟机->操作系统" :该阶段首先需要JRE或者JDK支持多语言(下载JRE的时候会让你选择英文版还是多语言版),然后就是虚拟机启动的时候使用什么字符集,默认也是采用当前系统的字符集,如需要修改字符集,加上JAVA的启动参数,-Dfile.encoding=GBK

      "操作系统->显示设备":该阶段主要就是需要操作系统支持显示中文就可以,就是安装了中文字体。

      看到这里后重新看我们的乱码问题,我们在本地编译(Java 源代码-> Java 字节码 阶段)默认采用了GBK字符集,而"Java 字节码-> 虚拟机->操作系统" 阶段是在法国服务器上进行,也是采用了默认的字符集,但这里的默认字符集确实Cp1252,因字符集不一致,所以就会乱码。

PS:以上属于个人理解,个人水平有限,如说的有问题,还请大虾们指点。



[作者]:BearRui(AK-47)
[博客]: http://www.blogjava.net/bearrui/
[声明]:本博所有文章版权归作者所有(除特殊说明以外),转载请注明出处.
英雄,别走啊,帮哥评论下:  

精彩推荐 好文要顶 水平一般 看不懂 还需努力

评论

# re: JAVA 不同区域服务器引起的乱码解决。  回复  更多评论   

2009-10-26 11:40 by 淘宝网首页
是采用了默认的字符集,但这里的默认字符集确实Cp1252,因字符集不一致,所以就会乱码

# re: JAVA 不同区域服务器引起的乱码解决。  回复  更多评论   

2009-10-29 09:54 by admin
一个tomcat上部署一个项目还好,如果多个项目,一个是法语的,一个中文的,如何解决

# re: JAVA 不同区域服务器引起的乱码解决。[未登录]  回复  更多评论   

2009-10-29 10:17 by lazy
不知道事先采用utf8会不会避免这个问题

# re: JAVA 不同区域服务器引起的乱码解决。  回复  更多评论   

2009-10-30 23:27 by BearRui(AK-47)
@admin

这种情况只能试试这个方法:

在项目中建1个listener,在应用启动的时候,设置一个下面的代码:
设置

System.setProperty("file.encoding", "你想要的编码");

这个就可以不同的项目设置不同的file.encoding了。

# re: JAVA 不同区域服务器引起的乱码解决。  回复  更多评论   

2009-10-30 23:27 by BearRui(AK-47)
@lazy
如果你的服务器本来就是UTF-8的话就可以。

只有注册用户登录后才能发表评论。


网站导航: