最近写了一个公司的微信授权通用接口,功能实现了之后却遇到头痛的乱码问题,主要在springMVC的controller中的redirect重定向环节,微信授权登录之后会把微信用户的昵称,openId,性别,头像,国家,省份,城市等用户信息组装成参数传给接口回调地址如:http://www.***.com/getWeixinInfo.do?url=http%3A%2F%2Fh5.bbt123.cn%2Fdemo.jsp,授权后会重定位到传过来的url,url要java.net.URLEncoder.encode进行编码。
最终解决方案如下:
1、因为参数是通过URL参数提交的,所以在%TOMCAT_HOME%/congf/server.xml中的标签,加入了URIEncoding="UTF-8"属性。
2、修改web.xml的编码过滤进行强制转码,如下:
<!-- 编码转换 -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value><!-- 强制进行转码 -->
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、中文参数在传之前要java.net.URLEncoder.encode进行编码
4、接收中文参数的时候要java.net.URLDecoder.decode进行解码,jsp中el表达式直接用{param.参数名}即可
希望分享这篇文章对大家有所帮助。。。。
如果您觉得本文的内容对您的学习有所帮助:
关键字:
Session