windows JAVA乱码的问题

BearRui 2009-10-24 02:04:09
1个很简单的类:

public class hello {
public static void main(String[] args){
String word = "中文";
try {
System.out.println(word);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

在本地编译运行都正常,可编译后传到服务器上就打印出来"??"。

如果我在服务器上用 javac hello.java 编译后,再执行就正常。

就是说我在本地编译的文件上传到服务器上中文就乱码,要是在服务器上编译服务器上运行就正常。

我的服务器在法国,操作系统是windows2003中文版的,中文字体肯定有。

问题就是不管是本机还是服务器,只能本机编译本机运行,把编译好的传到另1机器就不行了。

大家帮忙看看什么问题,谢谢
...全文
674 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangshan5588 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 swandragon 的回复:]
打印下Local看看
Locale local = Locale.getDefault();
System.out.println("country :"+local.getCountry());
System.out.println("language :"+local.getLanguage());
[/Quote]

支持。。。
Sleeping0804 2009-10-25
  • 打赏
  • 举报
回复
学习了....
lz12366007 2009-10-25
  • 打赏
  • 举报
回复
收藏了。。。。。很好。。
imasmallbird 2009-10-25
  • 打赏
  • 举报
回复
早晨起来又想了一下,感觉有个方法可以试一下,但是现在家里没有这个环境~~
我说一下,我的简单想法。
就是说如果你的工程中有类似于listener这种服务启动时就加载的类,那么在它的初始化的方法里的第一句
设置

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

这样无论你怎么编译在执行的时候都是之前已经写死的系统编码,而且这样设置还不会真正改变系统的编码
只会设置JVM内部指定的系统编码,
要是方便可以试一下~~
imasmallbird 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 bearrui 的回复:]
引用 23 楼 imasmallbird 的回复:
早晨起来又想了一下,感觉有个方法可以试一下,但是现在家里没有这个环境~~
我说一下,我的简单想法。
就是说如果你的工程中有类似于listener这种服务启动时就加载的类,那么在它的初始化的方法里的第一句
设置

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

这样无论你怎么编译在执行的时候都是之前已经写死的系统编码,而且这样设置还不会真正改变系统的编码
只会设置JVM内部指定的系统编码,
要是方便可以试一下~~


这个我开始也想过,不过没去试,下次试试看
[/Quote]
恩,那有机会,我再试试吧~~
BearRui 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 imasmallbird 的回复:]
早晨起来又想了一下,感觉有个方法可以试一下,但是现在家里没有这个环境~~
我说一下,我的简单想法。
就是说如果你的工程中有类似于listener这种服务启动时就加载的类,那么在它的初始化的方法里的第一句
设置

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

这样无论你怎么编译在执行的时候都是之前已经写死的系统编码,而且这样设置还不会真正改变系统的编码
只会设置JVM内部指定的系统编码,
要是方便可以试一下~~
[/Quote]

这个我开始也想过,不过没去试,下次试试看
老张-AI 2009-10-25
  • 打赏
  • 举报
回复
路过

学习了

http://blog.csdn.net/BearRui/archive/2009/10/24/4724544.aspx
imasmallbird 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 bearrui 的回复:]
恩,在catalina.bat加,如果tomcat是windows服务的话,可以直接在tomcat的启动界面中加。


[/Quote]
呵呵,以后要是能再维护之前的项目,找个机会试试~~
BearRui 2009-10-24
  • 打赏
  • 举报
回复
恩,在catalina.bat加,如果tomcat是windows服务的话,可以直接在tomcat的启动界面中加。

imasmallbird 2009-10-24
  • 打赏
  • 举报
回复
呵呵,也没帮上啥~~,解决问题就好
看了你写的那个了,挺不错的,收藏了
“tomcat上加上JAVA的启动参数 -Dfile.encoding=GBK”
这个是在catalina.bat中加的??
BearRui 2009-10-24
  • 打赏
  • 举报
回复
该问题已解决,大家看看我的解决办法:

http://blog.csdn.net/BearRui/archive/2009/10/24/4724544.aspx

PS:多谢imasmallbird的帮忙

下周2结贴,看还有没有人有更好的想法。
HelloAldis 2009-10-24
  • 打赏
  • 举报
回复
自己想了测试了半天 发现如果法国服务器的本地编码并不和Unicode或UTF-8的兼容的话
真的很难办 没有想到好方法 看看有没有高手来 要不叫竹子来

但如果编码可以兼容的话 就拿Eclipese来说可以换本地的默认编码为UTF-8或者Unicode来编辑编译这样也许
能成
kbzl251 2009-10-24
  • 打赏
  • 举报
回复
因为你保存的时候是用的GBK或是你系统使用编码,你编译的时候可能就记录的是这种编码。

你再换一个新的环境的时候编码不一致,所以就出现乱码吧。


这只是我的理解,错了希望有人来指点我一下。
imasmallbird 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 bearrui 的回复:]
有发现1个奇怪问题,在JSP中使用out.println(System.getProperty("file.encoding")) 打印出来是UTF-8,

如果在cmd 中用JAVA命令调用打印file.encoding又是Cp1512,难道tomcat修改了file.encoding?
[/Quote]
记得tomcat的server.xml中只有配置URIEncoding的地方,还不知道有能改变系统编码的设置
imasmallbird 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bearrui 的回复:]
现场编译太麻烦了,项目比较大的时候,文件比较多,传到法国的服务器太慢了,而且还需要在服务器上安装JDK和ANT,不好。

现在总算找到原因了,等下再想办法解决,谢谢啦,等我解决了就结贴。


[/Quote]
如果有解决办法,麻烦贴出来,谢谢
zhanlang9075 2009-10-24
  • 打赏
  • 举报
回复
三楼建议 或许可行[Quote=引用 3 楼 yidinghe 的回复:]
楼主这边的源代码全部换成 UTF-8 编码,然后 javac 命令加上-encoding UTF8 参数。
[/Quote]
BearRui 2009-10-24
  • 打赏
  • 举报
回复
有发现1个奇怪问题,在JSP中使用out.println(System.getProperty("file.encoding")) 打印出来是UTF-8,

如果在cmd 中用JAVA命令调用打印file.encoding又是Cp1512,难道tomcat修改了file.encoding?
BearRui 2009-10-24
  • 打赏
  • 举报
回复
现场编译太麻烦了,项目比较大的时候,文件比较多,传到法国的服务器太慢了,而且还需要在服务器上安装JDK和ANT,不好。

现在总算找到原因了,等下再想办法解决,谢谢啦,等我解决了就结贴。

imasmallbird 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bearrui 的回复:]
引用 1 楼 imasmallbird 的回复:
System.out.println(System.getProperty("file.encoding"));
在这两台服务器上分别输出一下,看看结果一样不??


正如你说的一样,果然是file.encoding不一样的原因,我在区域设置里面把服务器的改成中国,编码就一样了。

但问题是我的区域需要选择法国,因为上面还有其他的法语网站,如果改了这个会有影响,请问有没有其他地方修改file.encoding?
[/Quote]
其实这个也是之前在部署工程的时候发现的问题
当时也没有想出好的办法,就是是怕改变这个有影响,所以只能到现场进行编译,这样会少担一些额外的风险
感觉既然你可以在现场编译,就把工程在现场编译一下在发布应该是最保险的了~~
BearRui 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 imasmallbird 的回复:]
System.out.println(System.getProperty("file.encoding"));
在这两台服务器上分别输出一下,看看结果一样不??
[/Quote]

正如你说的一样,果然是file.encoding不一样的原因,我在区域设置里面把服务器的改成中国,编码就一样了。

但问题是我的区域需要选择法国,因为上面还有其他的法语网站,如果改了这个会有影响,请问有没有其他地方修改file.encoding?
加载更多回复(8)

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧