GETPOST 字符集编码问题

上传人:c** 文档编号:291142955 上传时间:2022-05-11 格式:DOCX 页数:7 大小:18.25KB
返回 下载 相关 举报
GETPOST 字符集编码问题_第1页
第1页 / 共7页
GETPOST 字符集编码问题_第2页
第2页 / 共7页
GETPOST 字符集编码问题_第3页
第3页 / 共7页
GETPOST 字符集编码问题_第4页
第4页 / 共7页
GETPOST 字符集编码问题_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《GETPOST 字符集编码问题》由会员分享,可在线阅读,更多相关《GETPOST 字符集编码问题(7页珍藏版)》请在金锄头文库上搜索。

1、本文格式为Word版,下载可任意编辑GETPOST 字符集编码问题 表单用post方法提交数据时乱码问题 解决手段一 . 1 解决手段二 . 2 解决手段三 . 3 解决手段一 a.jsp页面内容: 现象:中文乱码,譬如“?” 解决方法如下: 方法一:-尝试过,有效但切实不成取 1. 在b.jsp中把pageEncoding=改为pageEncoding= 虽然这样b.jsp页面显示的内容还是乱码,但是不是那种“?”的乱码, 而是一些特殊字符 2. 然后在欣赏器中查看菜单中修改成GB2312的编码,这时乱码就显示中文了。 3. 但是这种方法是不成行的。 方法二:- 尝试过,有效。我的片面页面就

2、是用该方法 1. 在b.jsp中把String name=request.getParameter(修改为 String name=new String(request.getParameter(2. 这时再在页面上显示,那么就是中文了。 3. 但是我个人不热爱这种方法,由于编写起来代码分外繁琐 方法三: 1. 有人说修改get/post的传值方式,但是这是有前提的, 假设只是把get方式修改成post方式,页面结果还是乱码! 2. 前提你务必配置了过滤器,若果你只是配置了过滤器, 那么传值方式务必是:post方式才不是乱码,假设是get方式照样是乱码! 3. 过滤器的配置,我想大家都能有,我

3、就不说了 方法四: 1. 有人说配置tomcat的配置文件server.xml里这句: Servlet服务器-欣赏器显示 编码 解码成unicode,然后将显示的内容编码 解码 (1) 欣赏器把URL(以及post提交的内容)经过编码后发送给服务器。 (2) 这里的Servlet服务器实际上指的是由Servlet服务器供给的servlet实现ServletRequestWrapper,不同应用服务器的 servlet实现不同,这些servlet的实现把这些内容解码转换为unicode,处理完毕后,然后再把结果(即网页)编码返回给欣赏器。 (3) 欣赏器按照指定的编码显示该网页。 当对字符串举行

4、编码和解码的时候都涉及到字符集,通常使用的字符集为ISO8859-1、 GBK、UTF-8、UNICODE。 2、URL的组成: 域名:端口/contextPath/servletPath/pathInfo?queryString 说明: 1、ContextPath是在Servlet服务器的配置文件中指定的。 对于weblogic: contextPath是在应用的weblogic.xml中配置。 / 对于tomcat: contextPath是在server.xml中配置。 / 2、ServletPath是在应用的web.xml中配置。 Example /example/* 2、Servle

5、t API 我们使用以下servlet API获得URL的值及参数。 request.getParameter(/ 获得queryString的参数值(来自于get和post),其值经过Servlet服务器URL Decode过的 request.getPathInfo(); / 留神:pathinfo返回的字符串是经过Servlet服务器URL Decode过的。 requestURI = request.getRequestURI(); / 内容为:contextPath/servletPath/pathinfo 欣赏器提交过来的原始数据,未被Servlet服务器URL Decode过。

6、3、开发人员务必领会的servlet模范: (1) HttpServletRequest.setCharacterEncoding()方法 仅仅只适用于设置post提交的request body的编码而不是设置get方法提交的queryString的编码。该方法报告应用服务器理应采用什么编码解析post传过来的内容。好多文章并没 有说明这一点。 (2) HttpServletRequest.getPathInfo()返回的结果是由Servlet服务器解码(decode)过的。 (3) HttpServletRequest.getRequestURI()返回的字符串没有被Servlet服务器de

7、coded过。 (4) POST提交的数据是作为request body的一片面。 (5) 网页的Http头中ContentType(的作用: (a) 报告欣赏器网页中数据是什么编码; (b) 表单提交时,通常欣赏器会根据ContentType指定的charset对表单中的数据编码,然后发送给服务器的。 debug= reloadable= 这里需要留神的是:这里所说的ContentType是指http头的ContentType,而不是在网页中meta中的ContentType。 三、下面我们分别从欣赏器和应用服务器来举例说明: URL:http:/localhost:8080/example

8、/中国?name=中国 汉字 编码 二进制表示 中国 UTF-8 0xe4 0xb8 0xad 0xe5 0x9b 0xbd-28, -72, -83, -27, -101, -67 中国 GBK 0xd6 0xd0 0xb9 0xfa-42, -48, -71, -6 中国 ISO8859-1 0x3f,0x3f63, 63信息失去 (一)、欣赏器 1、GET方式提交,欣赏器会对URL举行URL encode,然后发送给服务器。 (1) 对于中文IE,假设在高级选项中选中总以UTF-8发送(默认方式),那么PathInfo是URL Encode是按照UTF-8编码,QueryString是按

9、照GBK编码。 http:/localhost:8080/example/中国?name=中国 实际上提交是: GET /example/?-?name=?D1 (1) 对于中文IE,假设在高级选项中取消总以UTF-8发送,那么PathInfo和QueryString是URL encode按照GBK编码。 实际上提交是: GET /example/?D1?name=?D1 (3) 对于中文firefox,那么pathInfo和queryString都是URL encode按照GBK编码。 实际上提交是: GET /example/?D1?name=?D1 很鲜明,不同的欣赏器以及同一欣赏器的不

10、同设置,会影响最终URL中PathInfo的编码。对于中文的IE和FIREFOX都是采用GBK编码QueryString。 小结:解决方案: 1、URL中假设含有中文等非ASCII字符,那么欣赏器会对它们举行URLEncode。为了制止欣赏器采用了我们不梦想的编码,所以最好不要在URL中直接使用非ASCII字符,而采用URL Encode编码过的字符串%. 譬如: URL:http:/localhost:8080/example/中国?name=中国 建议: URL:http:/localhost:8080/example/?D1?name=?D1 2、我们建议URL中PathInfo和QueryString采用一致的编码,这样对服务器端处理的时候会更加简朴。 2、还有一个问题,我察觉好多程序员并不明白URL Encode是需要指定字符集的。不明白的人可以看看这篇文档: 2、 POST提交 对于POST方式,表单中的参数值对是通过request body发送给服务器,此时欣赏器会根据网页的ContentType(中指定的编码举行对表单中的数据举行编码,然后发给服务器。 在服务器端的程序中我们可以通过Request.setCharacterEncoding() 设置编码,然后通过 7

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

最新文档


当前位置:首页 > 大杂烩/其它

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