`
wsql
  • 浏览: 11713343 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

JSP中文乱码问题一

 
阅读更多

接触JSP难免会遇到Java的中文乱码问题,对于不同的情况,有不同的解决方法。以下是我所遇到的乱码问题以及查阅的一些解决方法。


一、页面编码不一致导致的乱码问题

这个乱码问题是最简单的乱码问题,一般新手会出现。看以下JSP页面代码:

中文乱码原因:

上述页面里三个地方出现了编码

1.pageEncoding="UTF-8":pageEncoding属性的作用是指定JSP页面的编码格式(或者说是以什么编码格式存储)Java IDE(如MyEcljpse)会根据这个编码格式保存文件。并编译jsp文件,包括里面的汉字。

2.contentType="text/html;charset=iso8859-1":contentType属性的作用是指定服务器出请求完成后回应给浏览器的内容类型。因为pageEncoding指定了存储格式为UTF-8,但是contentType却指定JSP文件被解码为iso8859-1,这样如有中文肯定出乱码,所以两者必须一致。

3.content="text/html; charset=UTF-8":content控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式不会产生影响。但有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面,导致浏览器混淆了编码格式。出现了乱码。


中文乱码解决方案:

步骤一、统一JSP页面中的pageEncoding、contentType和content的编码格式。修正后的代码如下:

步骤二、设置IDE(笔者用的是MyEclipse)的JSP页面的编码格式,将其统一设置为UTF-8。具体的设置方法可参见一下链接的文章:
(Eclipse)http://blog.csdn.net/cxwen78/article/details/6400798

(MyEclipse)http://cavonchen.iteye.com/blog/681810


二、表单使用Post方式提交后接收到的乱码问题

运行结果:用户名输入“中文”,提交后,下面的“userName的值”后面就出现了乱码。


这个问题也是一个常见的问题。这个乱码也是tomcat的内部编码格式iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受。导致乱码。既然这样的原因,下面有几种解决方式,并比较。


1、接受参数时进行编码转换:String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ; 这样的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。


2、接受参数时进行编码转换:在请求页面上开始处,执行请求的编码代码, request.setCharacterEncoding("UTF-8"),把提交内容的字符集设为UTF-8。这样的话,接受此参数的页面就不必在转码了。直接使用String str = request.getParameter("something");即可得到汉字参数。但每页都需要执行这句话。这个方法也就对post提交的有效果,对于get提交和上传文件时的enctype="multipart/form-data"是无效的。

采取这种方式解决修改后的代码如下:



对比可知,添加了request.setCharacterEncoding("UTF-8"),运行结果如下:正确显示“中文”


3、接受参数时进行编码转换:为了避免每页都要写request.setCharacterEncoding("UTF-8"),建议使用过滤器对所有jsp进行编码处理。这个网上有很多例子。请大家自己Baidu和Google查阅。


关于JSP中文乱码的问题还有一些,比如表单get提交方式的乱码、脚本代码关于url请求,接受到的参数乱码、上传文件时的乱码、数据库乱码等等,未完待续...



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics