关于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,不过上面的两中方式就不要加了
三种方式是独立的
------解决方案--------------------学习.