Java国际化问题

1. JVM使用unicode编码,所以Java本身是支持任何编码的

2. 但Java在与其他系统交互时会出现中文问题,因为其他系统使用的多数是本地码,这时需要做unicode码与本地码的转换,因此Java国际化问题都是出现在数据进出JVM的时候。一般情况下这种转换也可以正确进行,但如果有些Java应用没有考虑国际化支持,就要开发人员自己解决了,会出国际化问题的情况如下:

  • HTTP 参数 - 著名的web服务器tomcat就没有考虑国际化支持
  • 数据库 - 有些JDBC没有考虑国际化支持
  • 文件系统

3. 还有一个会出现国际化问题的是我们的JSP和Java源文件

3.1 java源文件的国际化问题

java源文件的国际化是容易解决的,java代码首先被编译成字节码,在编译时加上参数"-encoding "指明编码,就可以正确编译出unicode码的字节码

3.2 JSP文件的国际化问题

JSP文件首先被以本地码存在硬盘上,然后web服务器载入JSP文件并翻译成Servlet文件,然后编译这个java文件,如果在JSP文件里出现本地码的字符,而且所使用的web服务器没有考虑国际化,那么开发人员必须自己解决。

tomcat就没有考虑国际化支持,如果jsp里包含中文,最后显示的时候就会出现乱码。

  • 方法一

在jsp里加上contentType="text/html; charset=ISO-8859-1",达到的效果就是,tomcat首先编译jsp,这时使用iso编码,一个中文将被拆成两个unicode字符,两个字符的高位都是0,用户浏览这个页面时,tomcat会生成html页面并转换成本地编码发给客户端,因为我们告诉tomcat使用iso编码,所以所有字符高位被截掉,留下低位并发给客户端,这时的编码其实就是中文编码,但浏览器认为这是iso编码,所以用户需要手工修改一下浏览器的编码方法才可以正确显示中文。

  • 方法二

方法一解决的不好,一是因为在JVM中中文实际是乱码,而不是unicode码,二是在客户端要手工修改浏览器编码才能正确显示。

更好的解决方法是tomcat在将jsp翻译成servlet并编译成类时能使用参数-encoding,这样jsp类文件就是unicode码了,那么jvm里就是正确的编码,那么输出到客户端时用户可以任意转成需要的编码了。这种解决方法可能需要对tomcat做一些修改,还在研究之中,如果你有好的思路请联系我。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值