中文乱码解决方案

上传人:206****923 文档编号:41880337 上传时间:2018-05-31 格式:DOC 页数:5 大小:137.50KB
返回 下载 相关 举报
中文乱码解决方案_第1页
第1页 / 共5页
中文乱码解决方案_第2页
第2页 / 共5页
中文乱码解决方案_第3页
第3页 / 共5页
中文乱码解决方案_第4页
第4页 / 共5页
中文乱码解决方案_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《中文乱码解决方案》由会员分享,可在线阅读,更多相关《中文乱码解决方案(5页珍藏版)》请在金锄头文库上搜索。

1、IE6IE6 的的“以以 UTF-8UTF-8 发送发送 URL”URL”选项设置对请求页面字符编码有影响吗?选项设置对请求页面字符编码有影响吗?关键字: 字符编码 最近又碰到了中文乱码问题,这里我没有把数据库牵扯进来,先说下我 的环境,servlet 容器使用 Tomcat6.0,浏览器 FireFox3.0、IE6,涉及字符编 码设置的地方我的思路就是编码的地方都统一使用 UTF-8,具体配置如下:1.所有页面的 charset 设置为 UTF-8。2.Tomcat 的 URIEncoding 默认是 ISO-8859-1,而我设置为 UTF-8,主要是想解 决中文命名的文件以及请求以 g

2、et 方式提交有可能出现的乱码问题。3.添加过滤器,调用 request.setCharacterEncoding(“utf-8“)方法将 request 的字符集设定为 utf-8,解决请求以 post 方式提交的乱码问题。其实这样的设置貌似是不会再出现乱码问题了,不过,问题依旧来了 ,如 果我在浏览器的地址栏中输入中文参数提交,返回的页面却出现了乱码。真搞 不明白到底是哪里出了问题!说起来对中文乱码的问题一直是一支半解,出现 乱码了,网上搜罗了一大堆资料,按照网上的配置,问题到是解决了,不过原 理却搞的很模糊,一个请求发送到服务器,服务器业务逻辑处理后返回一个页 面,这中间涉及的字符集转换

3、,编码,解码过程一概不清楚。这次,折腾了半 天,总算是更进一步了解了字符编码问题,这里做个总结。先看我的总结,有不对的地方欢迎批评。首先我们看下,一个请求响应的流程浏览器 IE/FireFox -Servlet 容器-显示页面编码 使用容器的 URIEncoding 转码 解码我把用户发送请求方式不同引起的中文问题划分了四种类型:1、表单的 get 提交2、表单的 post 提交3、页面链接传递中文参数4、地址栏中参数直接输入中文提交1.1.首先我们看表单首先我们看表单 getget 方式提交方式提交 浏览器根据页面的 charset 编码方式对页面进行编码,然后提交至服务 器,首先进入对应的

4、字符编码过滤器(如果有的话),不过 Tomcat6.0 对于 get 提交方式采用的是 server.xml 文件中的 URIEncoding 编码方式,而并不会采用 过滤器中设置的编码,那么根据我的环境设置,jsp 页面都使用 UTF-8 的编码, Servlet 容器的 URIEncoding 也设置为 UTF-8,则 servlet 不用进行转码即可正 确解码,获得正常的中文字符串。那么,响应页面的中文因为页面的统一编码 (UTF-8)自然也会正常显示。当然,如果我们 Tomcat 的 URIEncoding 设置为其 他非 UTF-8 的编码方式时,页面的内容进入 Tomcat 解析时

5、,因为 Tomcat 和页 面的编码不统一,就需要转码。例如,如果我们采用 Tomcat 默认的 ISO-8859- 1,那么当我们使用 request.getParameter(“yourVariable “)获取表单参数值 时其实 Servlet 就进行了转码,它会以容器编码方式进行解码,这个过程如下:UTF-8(编码)ISO-58859-1(解码)这个过程也相当于我们使用如下的语句Java 代码 1. new String(变量值.getBytes(“UTF-8“),“ISO-8859-1“); 根据 API 的解释,先将变量值以 UTF-8 字符集编码转换为字节序列,再以 ISO- 8

6、859-1 字符集解码字节数组,构造出新的字符串对象。等价于以下方式:Java 代码 1. String code = “编码“; 2. code = URLEncoder.encode(code,“UTF-8“); 3. code = URLDecoder.decode(code,“ISO-8858-1“); 例如表单的 username 属性以字符串“编辑“提交,那么进入容器后,FormBean 中的这个变量会乱码,request.getParameter(username)一样的效果,s1 就是 request 返回的结果,下面是内存快照。不过即使这样,我们依然可以使用不恰当的方法显示正

7、常的中文,即逆向转码, 例如上面的乱码,我们可以通过 ISO8859-1UTF-8 这种方式还原我们提交时 的中文。以下是 GBK,UTF-8,ISO-8859-1 三者之间互相转换的内存快照:我们可以看到,偶数汉字可以在 UTF-8,GBK 两者中互相转换,而奇数个汉字 则不能。综上看来,貌似 Tomcat 的 URIEncoding 设置为 UTF-8 是最好的解决办 法,不过这样的设置依然无法解决上面我所说的第三、第四种情况。大家继续 向下看。(这里有一点我不确定,就是页面提交至 Servlet 容器时,是以页面的 charset 方式编码后直接进入容器,还是以 charset 转码为

8、ISO-8859-1 方式进 入,大家有什么见解?) 2.2.表单的表单的 postpost 提交提交 对于这种方式的请求,request.setCharacterEncoding(“一般来自于 web.xml 中过滤器设置的参数“)方法进行编码设置将会产生作用,struts 的表单提交方 式默认为 post 方式,那么按照上面我的环境设置,页面,容器,都采用 UTF-8 编码方式,就不会产生中文乱码问题。 3.3.页面链接中传递中文参数页面链接中传递中文参数 我虚拟一个这样的场景,请求页面中有如下代码Html 代码 1. 4. “ 页面中链接传递中文对于这种方式,我们需要先将参数使用统一的编

9、码方式编码,将编码后的字符 放入链接,这里我对参数以 UTF-8 方式编码,如下Java 代码 1. 那么这样我们也不会产生中文乱码问题4.4.地址栏中参数直接输入中文提交地址栏中参数直接输入中文提交 例如浏览器地址栏中输入“http:/localhost:8080/helloapp.do?username=编 辑“提交,对于这种方式,浏览器不会采用页面的 charset 方式对 URL 中的中文 进行编码后提交至服务器(IE,FireFox 都一样),而是采用系统的 GBK 转码为 ISO-8859-1 之后提交至 Servlet 容器,那么,如果对于前三种方式我们所做的 设置,在这里就有问

10、题了,因为进入容器时中文进行了 GBK 至 ISO-8859-1 的转 码,而之前我们的 Servlet 容器 URIEncoding 设置为 UTF-8,当我们使用 request.getParameter(“username“)时,相当于又进行了这样的流程 GBK- ISO-8859-1UTF-8,按照以上我们使用的测试中文,“编辑”,使用request.getParameter(“username“)则会得到这样的结果,下图是进行转码的内存快照:我们可以看到“编辑”经过从 GBKISO-8859-1UTF-8 的过程后得到的就是这样的结果,这里我们还会想到那进行 2 次逆向转码看看,不过

11、可惜的是,结果为“锟 洁辑”。对于这种情况,我们的解决办法就是,Tomcat 的 URIEncoding 采用默 认的 ISO-8859-1 字符集,那么我们可以在程序中通过 ISO-8859-1GBK 这样 不恰当的逆向转码方式得到正常的中文“编辑”,但这样的结果是,我们 get 请求方式的中文处理解决办法就需要改变。如,在我的环境下就需要进行 ISO- 8859-1UTF-8 的转码,挺不爽。综上,对于乱码问题,前三种方式是一般用户的请求方式,第四种属于非正常 途径的请求方式,对于这种方式产生的问题我认为无法很好的解决,也不需要 解决。我看到 javaeye 对于这样的情况就没有处理,不知

12、道大家在自己的项目 中是如何处理的?我的实验是,IE6 的设置会影响应用路径的编码方式,例如 地址栏中请求一个中文 JSP 页面,如:http:/localhost:8080/helloapp/编辑. jsp,IE 默认是勾选“以 UTF-8 发送 URL“项的,那么按照我上面总结的处理方式,这个请求可以正常显示页面,如图:如果取消 IE 的这个选项,那么浏览器会以 GBK 编码应用路径的中文,得到的结 果如图:按照我上面的设置,这里如果将 Tomcat 的 URIEncoding 设置为 GBK,则也可以 正常显示页面。对于 FireFox3.0,则是以 UTF-8 编码。最后,回到我的题目,向大家讨教下,IE6 的“以 UTF-8 发送 URL”选项设置对 请求页面字符编码有影响吗?欢迎讨论!我的测试代码共享给大家:),使用的是 struts1.2,struts 的 jar 包,大家可以 去 apache 下载。这里推荐个链接,有兴趣的可以深入了解更多字符集、编码的问题。http:/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号