中文乱码解决方案.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中文乱码解决方案

IE6的“以UTF-8发送URL”选项设置对请求页面字符编码有影响吗? 关键字: 字符编码 ????? 最近又碰到了中文乱码问题,这里我没有把数据库牵扯进来,先说下我的环境,servlet容器使用Tomcat6.0,浏览器FireFox3.0、IE6,涉及字符编码设置的地方我的思路就是编码的地方都统一使用UTF-8,具体配置如下: 1.所有页面的charset设置为UTF-8。 2.Tomcat的URIEncoding默认是ISO-8859-1,而我设置为UTF-8,主要是想解决中文命名的文件以及请求以get方式提交有可能出现的乱码问题。 3.添加过滤器,调用request.setCharacterEncoding(utf-8)方法将request的字符集设定为utf-8,解决请求以post方式提交的乱码问题。 其实这样的设置貌似是不会再出现乱码问题了,不过,问题依旧来了 ,如果我在浏览器的地址栏中输入中文参数提交,返回的页面却出现了乱码。真搞不明白到底是哪里出了问题!说起来对中文乱码的问题一直是一支半解,出现乱码了,网上搜罗了一大堆资料,按照网上的配置,问题到是解决了,不过原理却搞的很模糊,一个请求发送到服务器,服务器业务逻辑处理后返回一个页面,这中间涉及的字符集转换,编码,解码过程一概不清楚。这次,折腾了半天,总算是更进一步了解了字符编码问题,这里做个总结。 先看我的总结,有不对的地方欢迎批评。 首先我们看下,一个请求响应的流程 ? 浏览器 IE/FireFox --------Servlet容器-----------------显示页面 ??????编码??????????使用容器的URIEncoding转码 ???????????? 解码 我把用户发送请求方式不同引起的中文问题划分了四种类型: 1、表单的get提交 2、表单的post提交 3、页面链接传递中文参数 4、地址栏中参数直接输入中文提交 ? 1.首先我们看表单get方式提交 ????? 浏览器根据页面的charset编码方式对页面进行编码,然后提交至服务器,首先进入对应的字符编码过滤器(如果有的话),不过Tomcat6.0对于get提交方式采用的是server.xml文件中的URIEncoding编码方式,而并不会采用过滤器中设置的编码,那么根据我的环境设置,jsp页面都使用UTF-8的编码,Servlet容器的URIEncoding也设置为UTF-8,则servlet不用进行转码即可正确解码,获得正常的中文字符串。那么,响应页面的中文因为页面的统一编码(UTF-8)自然也会正常显示。当然,如果我们Tomcat的URIEncoding设置为其他非UTF-8的编码方式时,页面的内容进入Tomcat解析时,因为Tomcat和页面的编码不统一,就需要转码。例如,如果我们采用Tomcat默认的ISO-8859-1,那么当我们使用request.getParameter(yourVariable )获取表单参数值时其实Servlet就进行了转码,它会以容器编码方式进行解码,这个过程如下: UTF-8(编码)--ISO-58859-1(解码) 这个过程也相当于我们使用如下的语句 Java代码 new?String(变量值.getBytes(UTF-8),ISO-8859-1);?? new String(变量值.getBytes(UTF-8),ISO-8859-1); 根据API的解释,先将变量值以UTF-8字符集编码转换为字节序列,再以ISO-8859-1字符集解码字节数组,构造出新的字符串对象。 等价于以下方式: Java代码 String?code?=?编码; ?? code?=?URLEncoder.encode(code,UTF-8); ?? code?=?URLDecoder.decode(code,ISO-8858-1);?? String code = 编码; code = URLEncoder.encode(code,UTF-8); code = URLDecoder.decode(code,ISO-8858-1); ? 例如表单的username属性以字符串编辑提交,那么进入容器后,FormBean中的这个变量会乱码,request.getParameter(username)一样的效果,s1就是request返回的结果,下面是内存快照。 不过即使这样,我们依然可以使用不恰当的方法显示正常的中文,即逆向转码,例如上面的乱码,我们可以通过ISO8859-1--UTF-8这种方式还原我们提交时的中文。以下是GBK,UTF-8,ISO-8859-1三者之间互相转换的内存快照: ?我们可以看到,偶数汉字可以在UTF-8,GBK两者中互相转换,而

文档评论(0)

yaobanwd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档