`
wq_pro
  • 浏览: 32842 次
  • 来自: ...
社区版块
存档分类

GET方式传递中文参数时乱码问题分析

阅读更多

这几天在研究resteasy框架的使用,在测试通过GET方式传递中文参数时出现乱码问题。

经过分析,使我对TOMCAT的处理机制和HttpServletRequest有了更加深入的认识。

1.filter过滤器中获取参数值出现乱码

下面是服务器端中的过滤器获取参数的代码:

	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		String foo=arg0.getParameter("foo");
		System.out.println(foo);
		arg2.doFilter(arg0, arg1);
	}
 

 

    当我在浏览器输入“http//:localhost:8080/rest/test?foo=中国”时,浏览器会自动对"中国"进行URI转码,由于使用的中文语言环境,浏览器会将“中国”转码为"%D6%D0%B9%FA"."D6D0","B9FA"分别"中","国"的GBK编码。等价于在JAVA语言中作了如下操作

URLEncoder.encode("中国","GBK")

 

传递到服务器后的URL实际为“http//:localhost:8080/rest/test?foo=%D6%D0%B9%FA”。

    由于TOMCAT默认会对URL进行解码,并且使用的是ISO-8859-1字符集,如下所示

URLDecoder.decode("%D6%D0%B9%FA","ISO-8859-1");

 因为编码和解码使用的是不同的字符集,所以解码出来的字符串肯定是不对的,故而使用如下方式获取参数值时出现乱码。

String foo=request.getParameter("foo");

 2.resteasy的service方法中获取参数出现乱码

	@GET
	@Path("/test")
	public void hello10(@QueryParam(value="foo") String foo) {
		System.out.println(foo);

	}	

 resteasy中获取到request参数foo的机制与前面的filter略有不同。foo参数的是值由resteasy框架进行类似如下处理后获得的。

 

String params=request.getQueryString();
System.out.println(params);//foo=%D6%D0%B9%FA
String encodedParams= URLDecoder.decode(params,"UTF-8");
......

 通过getQueryString()方式获得的参数并没有被TOMCAT解码过,但被resteasy框架进行了解码,当传入参数不是以UTF-8编码的话获取到的参数就可能是乱码

3.总结

使用request.getParameter方式获得的参数是已经经过web服务器解码的

使用request.getQueryString可以获得未解码的原始参数

对于tomcat解码造成的乱码问题可以通过2种途径解决

         修改tomcat配置文件设置解码方式

         服务器端对于获取到的参数进行new String(param.getBytes("ISO-8859-1"),"页面指定编码")转换

 

 

分享到:
评论

相关推荐

    修改Tomcat默认编码消除get方式传递参数出现中文乱码

    修改Tomcat默认编码消除get方式传递参数出现中文乱码修改Tomcat默认编码消除get方式传递参数出现中文乱码修改Tomcat默认编码消除get方式传递参数出现中文乱码修改Tomcat默认编码消除get方式传递参数出现中文乱码

    JSP-GET-POST传递的乱码问题

    JSP-GET-POST传递的乱码问题 中文参数传递乱码问题一直伴随着我们,整理的解决过程。

    动态加载iframe时get请求传递中文参数乱码解决方法

    主要介绍了动态加载iframe时get请求传递中文参数乱码解决方法,需要的朋友可以参考下

    GET方法URL中传递中文参数乱码的解决方法

    在页面中对URL进行编码,最好不要在URL中传递中文参数否则会出现乱码

    JAVA POST与GET数据传递时中文乱码问题解决方法

    最近乱忙活弄了一个企业家宣传网站遇到了中文字符集乱码问题,在此分享一下即简单又实用的解决方法,感兴趣的朋友可以参考下哈

    Spring MVC参数传递中文乱码解决方法分享

    主要介绍了Spring MVC参数传递中文乱码解决方法分享,具有一定借鉴价值,需要的朋友可以参考下。

    JQuery的Ajax中Post方法传递中文出现乱码的解决方法

    之前我在用GET方式传递中文参数时,只需要在后台程序中设置页面编码为GB2312即中文能正常显示,可是这次由于表单项目较多,不适合用GET方式传递,只能用POST方式,但发现后台程序中设置编码为GB2312时中文还是显示的...

    .Net获取URL中文参数值的乱码问题解决方法总结

    本文总结分析了.Net获取URL中文参数值的乱码问题解决方法。分享给大家供大家参考,具体如下: 解决方法: 1.设置web.config文件 2.传递中文之前,将要传递的中文参数进行编码,在接收时再进行解码。 string ...

    解决URL地址中的中文乱码问题的办法

    解决URL地址中的中文乱码问题的办法 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符... 由于我们利用URL传递参数这种方式是依

    解决angularjs前后端分离调用接口传递中文时中文乱码的问题

    1、首先前端需要进行字符串加密两次 encodeURIComponent(encodeURIComponent(param)); 2、这里是以java后台为例需要进行一次解码 URLDecoder.decode("接受到的... map.put("_key",URLDecoder.decode(map.get("_k

    js的base64和base32加密函数

    js的base64和base32加密函数 ajax通过get方式传递中文参数特殊符号的参数避免乱码终极解决方案.

    有关Ajax中get和post的使用问题

    乱码,当传递中文或者特殊字符的时候,前台显示出现乱码 解决办法:使用编码encodeURI(‘蜗牛’) 测试结果:通过使用Chrome测试,结果get的两种问题,都已经得到了解决 使用post遇到的问题: post方式,

    在Ajax中使用get和post所遇到的问题及解决办法

    乱码,当传递中文或者特殊字符的时候,前台显示出现乱码 解决办法:使用编码encodeURI(‘蜗牛’) 测试结果:通过使用Chrome测试,结果get的两种问题,都已经得到了解决 使用post遇到的问题:

    Tomcat-7.0.30

    修改目的:为了解决使用HTTP Get方法传递中文参数乱码的问题 修改context.xml: 把修改成<Context reloadable="true"> 修改目的:当Web应用中的文件或者web.xml文件修改后,Tomcat服务器 会自动重新加载当前Web...

    不同编码的页面表单数据乱码问题解决方法

    自己验证了下,果然如此,而且比对两边GET提交的参数,除了有个字段的值不同外,参数个数这些都是相同的,故考虑有可能是编码问题造成的影响。 分别打开两个文件后查看,发现两边编码确实不一致,而服务器那边为GB...

    python中urllib.unquote乱码的原因与解决方法

    发现问题 Python中的urllib模块用来处理url相关的操作,...笔者在一个真实的Tornado应用中就遇到了这样的问题,浏览器通过请求传递到后台后,获取参数的值后: name = self.get_argument("name", "") name = urllib.u

    站长万能助手 v1.8.zip

    模拟get、post方式提交 自定义ID段进行提交数据信息进行宣传、破坏 可用于95%以上的wap网站进行发表文章、评论、发帖、发内线、回帖…… 可对一些如在线会员、发帖、文章进行提取,自动回复、宣传、采集 只需...

    从J2SE到J2EE知识点介绍

    5. JSP页面通过URL传递中文参数的乱码问题 139 四、 Struts2 140 (一) 基于struts2的web应用的开发步骤 140 1. MVC设计模式() 140 2. 基于struts的web应用的开发步骤 141 3. 如何写自定义action,实体,以及业务类...

    EXCEL集成工具箱V6.0

    【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体...

Global site tag (gtag.js) - Google Analytics