日期:2014-05-20  浏览次数:20842 次

关于JSP中日文乱码问题的解决
说明:由于乱码问题造成的原因可能有很多种,而且不同的环境下面,结果也不一样。
本人一直致力于找出一套完整的,万能的解决方案,希望各位能够共同讨论。

第一部分:
关于日文编码,目前比较使用的比较多的是Shift_js和windows-31J.

Shift_js和windows-31J的区别,参见:http://blog.csdn.net/luyang1016/archive/2007/06/14/1652469.aspx

对于一般表单提交的乱码,处理无非就是在jsp中加上3句话。

<%@   page   language= "java "   contentType= "text/html;charset=Windows-31J "%>
表示jsp的编码是   Windows-31J

<meta   http-equiv= "Content-Type "   content= "text/html;   charset=SJIS ">
表示jsp上固定项目,是SJIS的,固定项目既然是固定字符,一般无需用Windows-31J

<%   request.setCharacterEncoding( "Windows-31J ");   %>
这个request都给他设上编码

以上处理,紧紧是最简单的处理,据说可以通过web.xml的配置来进行管理的,如何配置web.xml,暂时没研究过。


第二部分:
关于url里面传递日文参数造成的乱码问题解决方案

一般将所需要做为参数的字符窜进行转码就可以了

例子:           String   param1=   URLEncoder.encode(   “陸楊”, "Windows-31J ");
     
特别注意:     对于   encode过的字符集,按照道理来说是需要URLDecoder.decode()解析之后才能使用的。
但是好像在下一个画面中使用       :request.getParameter( "param1 ");   得到的结果还是 "陸楊 "
不知道是不是servelet内部已经作过转换了。
这个问题希望高人予以赐教。

如果上面的解决方案不能解决你的问题,而且你有是使用tomcat作为Apserver的话,
可以尝试一下下面的方法解决。
                       

在tomcat的server.xml中,加入URIEncoding= "Windows-31J
    <!--   Define   a   non-SSL   Coyote   HTTP/1.1   Connector   on   the   port   specified   during   installation     -->
        <Connector       port= "8080 "   maxThreads= "150 "   minSpareThreads= "25 "   maxSpareThreads= "75 "
                              enableLookups= "false "   redirectPort= "8443 "   acceptCount= "100 "
                              debug= "0 "   connectionTimeout= "20000 "  
                              disableUploadTimeout= "true "   URIEncoding= "Windows-31J "/>


以上方法仅供参考。
问题希望高人予以解答,不甚感激
 


------解决方案--------------------
补充一下
在tomcat的server.xml中,加入URIEncoding= "Windows-31J
只能解决用get提交,
用post的话,就要用 <% request.setCharacterEncoding( "Windows-31J "); %>


new String(request.getParameter( "username ").getBytes( "ISO_8859_1 "), "GBK ");就都可以解决了,因为tomcat内部是ISO_8859_1,不过上面的两中方式就不要加了

三种方式是独立的
------解决方案--------------------
学习.