URL传中文参数导致乱码的解决方案之encodeURI

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

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

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,而服务器后端在解码时只解了一次?

原因是:容器会默认帮你解一次码。

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

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

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

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

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

<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”的途径获取中文参数吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最近一个项目,测试时采用的Windows下的Tomcat服务器,上传中文文件正常;部署时用到了Linux服务器,上...
    Jackeroo阅读 4,673评论 1 3
  • 可以看我的博客 lmwen.top 或者订阅我的公众号 简介有稍微接触python的人就会知道,python中...
    ayuLiao阅读 3,425评论 1 5
  • 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换...
    x360阅读 2,591评论 1 20
  • 学习方法 不要单纯学习大堆语法和理论, 应该通过实际练习, 去了解需要用到的知识, 让大脑更容易吸收 画画时候"不...
    关大明阅读 508评论 0 0
  • x市第一人民医院 天空晴朗,阳光微燥,放眼望去,映入眼帘的是一个穿着白色大褂的女人,虽没看清面容,但与之不同的...
    尤忘初心阅读 531评论 0 0

友情链接更多精彩内容