java页面url中文传值乱码

时间:2021-09-28 16:05:16

     我在使用spring开发一个web应用程序时,遇到url使用中文作为参数值传递时发生乱码的问题。具体项目情况是通过android客户端调用web服务器提供的搜索功能,因此在调用的url中需要将客户端输入的关键字作为搜索的参数值,自然会涉及到参数值为中文的情况。经过网上查阅相关资料和大牛的分析,结合我自己的实际情况,现把解决办法贴上。

     1、客户端使用java.net.URLEncoder.encode(Url, "UTF-8"),这里的url就是调用服务器端的url,将其进行utf-8编码。

     2、服务器端获取到参数后,使用java.net.URLDecoder.decode(searchStr, "UTF-8"),将传递过来的参数进行utf-8解码。

     3、完成以上两步不一定就能成功,这还与web服务器有关。我使用的是tomcat,因此需要确定tomcat的目录下的/conf/server.xml配置文件是否添加了如下代码:

          <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"URIEncoding="UTF-8"/>,红色部分表示需要添加的,默认tomcat的配置文件是没有该代码的。

     最后,简单介绍一下我在用浏览器测试url时发现的问题,当使用360浏览器测试时,url中的搜索关键字输入的是中文,回车之后,无返回结果,换作其他浏览器,比如firefox或者是chrome,即使url的参数值是中文,也能返回正确的结果,而且仔细观察看你会发现,当将chrome浏览器中带有中文参数值的url复制并粘贴到新标签时,中文参数值自动被转码了,如:searchStr=%E7%88%B1。将chrome中转码之后的url再粘贴到IE或者是360浏览器中进行访问,则会返回正确的值,由此说明,chrome、firefox一类浏览器会对中文值自动进行转码,而基于IE内核的浏览器则需要自己转码。以上仅是我测试之后得出的结论,如有不对,欢迎指正,非常感谢