[转]URL传中文参数致使乱码的解决方案之encodeURI

经过URL传中文参数时,在服务端后台获取到的值每每会出现乱码。解决方案有不少种。本文介绍如何经过encodeURI来解决中文乱码问题。javascript

首先,在前端页面准备参数的时候,须要对中文参数进行encode处理:html

var url = 'HelloWorldServlet?star_name='+
encodeURI(encodeURI("刘德华"));
window.open(url);

 其次,在服务端后台程序代码中用java.net.Decoder进行解码,从而获得中文参数的真实值:前端

String starName = 
java.net.URLDecoder.decode(request.getParameter("star_name"),"UTF-8");

目的达到了。哈哈,很简单吧。不过此时你可能有个疑问,前端在进行encode编码是,为何用了两次encodeURI,而服务器后端在解码时只解了一次?java

缘由是:容器会默认帮你解一次码。后端

此时,你可能又要问了,既然容器会默认解一次码,那么为何不直接在前端只进行一次encode,服务端程序直接request.getParameter(“star_name”) ?多此一举了吧?服务器

缘由是:容器默认解码时采用的编码是容器的默认编码,多是UTF-8,GBK,也多是其余编码方式。这与你的应用的编码方式未必会一致。因此你直接获取的话可能会出现乱码。编码

固然也能够经过修改容器的默认编码,而实现“前端一次encode——后端直接获取”的途径获取中文参数。url

例如:Tomcat的默认编码修改方式:spa

修改%TOMCAT_HOME%/conf/server.xml,找到这行代码:.net

<Connector port="8080" protocol="HTTP/1.1" redirectPort="8449" connectionTimeout="20000"/>

  

在后面能够追加URIEncoding属性,例如:

<Connector port="8080" protocol="HTTP/1.1" redirectPort="8449" connectionTimeout="20000" URIEncoding="UTF-8"/>

 

若是不方便改容器默认编码方式,或者应用程序自己就有多种编码方式的话,仍是采起本文给出的解决方案,经过“前端两次encode——后端一次decode”的途径获取中文参数吧。

相关文章
相关标签/搜索