您的位置:首页 > 编程语言 > Java开发

接口参数中文乱码(MYSQL+STRUTS)

2014-04-04 15:22 225 查看
前几天做一个项目的时候,遇到了传过来的中文参数是乱码的问题:
http://localhost:8081/my_service/getInData?className=美女&pageNo=1&pageSize=3 
在服务器端接受到的className=????。

显示百度、google之后,说是数据库编码的问题,于是查询数据库:

1、SHOW   VARIABLES   LIKE   "%char%"

       


没有问题,如果这里有不是utf8的可以执行SET character_set_server  = utf8修改。

2、继续查询  SHOW   VARIABLES   LIKE   "%coll%"

       


也没有发现问题,继续往下。

3、查询表里面字段的编码格式 SHOW FULL COLUMNS FROM pics

       


也没有问题,数据库的可能性排除。

然后,想到用的是struts2,于是找到struts2的配置文件,在里面加入<constant name="struts.i18n.encoding" value="utf-8"></constant>,将编码设置成utf-8,再测试,还是不行。

最后,在后台代码中加入

this.response.setContentType("text/html;charset=utf-8");
this.response.setCharacterEncoding("utf-8");
this.request.setCharacterEncoding("utf-8");

在测试,还是不行。。。。郁闷了一中午。

下午,求救于qq群。

有一个人说加入 URLDecoder.decode(str,"utf-8");这个,意思是页面是用encodeURI进行转码的,是把汉字转换成

¥%#¥%¥%¥%¥%¥%¥%#¥%#¥% 类似与这个玩意的东西,后台在用URLDecoder.decode(str,"utf-8"); 转回来,测试,还是不行。

奔溃ing。。。。

最后,又有一个说是页面默认的编码是ISO-8859-1,而接口中没有设置编码格式,所以不行,需要在后台代码中加入如下代码

className = new String(className.getBytes("ISO-8859-1"), "utf-8");

将传过来的参数进行转码。

测试,成功!

PS:这种方法虽然可以解决问题,但是它每传过来一个参数,就要进行一次new String(),效率不高,所以,只能是在参数很少,而且是中文的情况下使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: