收藏 分享(赏)

jsp页面显示中文乱码解决.docx

上传人:kpmy5893 文档编号:7655666 上传时间:2019-05-23 格式:DOCX 页数:4 大小:15.70KB
下载 相关 举报
jsp页面显示中文乱码解决.docx_第1页
第1页 / 共4页
jsp页面显示中文乱码解决.docx_第2页
第2页 / 共4页
jsp页面显示中文乱码解决.docx_第3页
第3页 / 共4页
jsp页面显示中文乱码解决.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、jsp 页面显示中文乱码: jsp 页面的编码方式有两个地方需要设置: 其中:pageEncoding 指的是 jsp 文件本身在本地保存时的编码方式。contentType 的 charset是指服务器发送网页内容给客户端时所使用的编码。 从第一次访问一个 jsp 页面开始,到这个页面被发送到客户端,这个 Jsp 页面要经过三次编码转换: 第一阶段是 jsp 编译成.java,它会根据 pageEncoding 的设定读取 jsp,结果是由指定的编码方案翻译成统一的 UTF-8 JAVA 源码(即.java ) ,如果 pageEncoding 设定错了,或没有设定,出来的就是中文乱码。 第

2、二阶段是由 JAVAC 的 JAVA 源码至 java byteCode 的编译,不论 JSP 编写时候用的是什么编码方案,经过这个阶段的结果全部是 UTF-8 的 encoding 的 java 源码。 JAVAC 用 UTF-8 的 encoding 读取 java 源码,编译成 UTF-8 encoding 的二进制码(即.class ) ,这是 JVM 对常数字串在二进制码(java encoding)内表达的规范。 第三阶段是 Tomcat(或其的 application container)载入和执行阶段二的来的 JAVA 二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段

3、一和阶段二的参数 contentType就发挥了功效 所以最终的解决方法为: 在 jsp 页面设置 pageEncoding 或者 contentType 的其中一个为支持中文的编码格式(如 utf-8, gbk,gb2312) 。因为设置一个的话,另一个默认会和它一样。 如果两个都设置的话,必须保证两个都是支持中文编码(不一定要一样) 。 最佳建议设置如下: 2. post 方式传值乱码: 由于 post 方式传值是通过 request 存储的,在另一个页面也是通过request.getParameter(String name)来提取信息,所以这种情况下的乱码主要是因为 request存储

4、信息的编码设置导致的。post 提交时,如果没有设置提交的编码格式,则会以iso8859-1 方式进行提交,接受的 jsp 却以 utf-8 的方式接受。所以使用如下语句即可得到单个正确的中文字符串:String str = new String(request.getParameter(“something“).getBytes(“ISO-8859-1“),“utf-8“) ; 解决方法: 在接收页面设置 request.setCharacterEncoding(“UTF-8“)。最好通过过滤器实现每个页面都设置为 request.setCharacterEncoding(“UTF-8“)。

5、 3. get 方式传值乱码: get 方式传值有两种,一种是表单 get 传值,另一种是 url 地址传值(实质上这两种方式都是通过 url 参数的方式传值) 。 表单方式 get 传值: 表单方式 get 传值的编码过程为,首先浏览器根据页面的 charset 编码方式对传值进行编码,然后提交至服务器交给 tomcat,tomcat 对这些信息进行解码时,采用的解码方式是由server.xml 文件中的 URIEncoding 设置决定的,也就是说,当我们使用命令request.getParameter(“)获取表单参数值时,得到的字符串,经过了 charset 的编码和URIEncodi

6、ng 的解码。 由上所知,只要 charset 的编码和 URIEncoding 的解码一致,并且支持中文,就能保证没有乱码。 设置 URIEncoding 的方法如下: 方法一: 修改$TOMCAT/conf/server.xml 文件,在 HTTP Connector 或者 AJP Connector 的配置加上URIEncoding=“gbk“ 方法二: 使用 useBodyEncodingForURI=“true“. 这个方法适合你的 TOMCAT 实例下需要跑多个不同Encoding 的程序时。 enableLookups=“false“ redirectPort=“8443“ pr

7、otocol=“AJP/1.3“ useBodyEncodingForURI=“true“ / 在 Tomcat 配置中,连接器(HTTP Connector)属性中有一个 URIEncoding 和 useBodyEncodingForURI 属性 ,这两个属性设置对 URL 后的附加参数进行 URL 解码时该如何选择 字符集编码。 URIEncoding 用于制定 URL 后的附加参数的字符集编码,useBodyEncodingForURI 则说明是否采用实体内容的字符集编码设置来替代 URIEncoding 的设置,也就是说当 useBodyEncodingForURI 属性设置为 tr

8、ue 时ServletRequest.setCharacterEncoding 方法设置的字符集编码也影响 getParameter 等方法对URL 地址后的参数进行 URL 解码的结果。 (在/%TomCat_Home%/ confserver.xml 文件中找到 标记,然后在后面加上 useBodyEncodingForURI=true) url 方式 get 传值乱码: 于这种方式,浏览器不会采用页面的 charset 方式对 URL 中的中文进行编码后提交至服务器(IE,FireFox 都一样 ),而是采用系统的 GBK 转码为 ISO-8859-1 之后提交至服务器 tomcat,所

9、以这个过程为: 首先,url 地址中的中文被从 gbk 转换成 ISO-8859-1,交给 tomcat 后,又被 tomcat 根据URLEcoding 解码,这种情况,只有把 URLEcoding 设置为 gbk 才能在request.getParameter(“)时不出现乱码。但是这样就会影响到上面的配置,所以一个好的解决方法是,使用 .URLEcoder 和 URLDecoder 对地址中的中文进行手动编码和解码。 所以一个万全的解决方法为: 1.所有页面的 charset 设置为 UTF-8。 2.Tomcat 的 URIEncoding 默认是 ISO-8859-1,而我设置为 UTF-8,主要是想解决中文命名的文件以及请求以 get 方式提交有可能出现的乱码问题。 3.添加过滤器,调用 request.setCharacterEncoding(“utf-8“)方法将 request 的字符集设定为utf-8,解决请求以 post 方式提交的乱码问题。 4. url 地址中存在中文参数时,首先对中文参数使用 URLEcoder 编码为 utf-8,然后在request.getParameter(“)接收到参数后再使用 URLDecoder 还原。例如: From.jsp 页面: “转入 To.jsp 页面

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报