资讯专栏INFORMATION COLUMN

解决url请求参数带中文时后台获取出现乱码问题

Fourierr / 3021人阅读

摘要:在服务器端,首先通过自动进行第一次解码可能是等字符集对结果无影响得到字符,然后再使用进行第二次解码,通常使用方法。

第一种方法:
var url = encodeURI(url);前端js先编码一次,
后台:String test=newString(request.getParameter("test").getBytes("iso8859-1"),"UTF-8");

先解码还原成byte数组, 再用utf-8 解码(另外也可以修改容器的配置文件, 让容器在遇到 GET 提交的参数时,使用 UTF-8编码. )
此时test已成功解码不出现乱码问题

第二种方法是:
前端JS两次编码:var url = encode(encodeURI(url));
后台 String test=URLDecoder.decode(request.getParameter("test"),"UTF-8");

如果只进行一次encodeURI,得到的是UTF-8形式的URL,服务器端通过request.getParameter()解码查询参数(通常是iso-8859-1)就会得到乱码。

进行两次encodeURI,第一次编码得到的是UTF-8形式的URL,第二次编码得到的依然是UTF-8形式的URL,但是在效果上和第一次进行一次UTF-8编码(此时全部转换为ASCII字符,没有多字节字符了),第二次进行一次iso-8859-1编码是一样的.

因为对英文字符来说, UTF-8编码和ISO-8859-1编码的结果相同。在服务器端,

首先通过request.getParameter()自动进行第一次解码(可能是gb2312,gbk,utf-8,iso-8859-1等字符集,对结果无影响)得到Ascii字符,然后再使用UTF-8进行第二次解码,通常使用Java.NET.URLDecoder("","UTF-8")方法。

附别人的讲解:

客户端发送的是请求头,而参数会根据你当前页面的编码方式进行编码之后发送给服务器
如果是utf-8,那就会根据utf-8进行编码发送给服务器.

如果是jsp文件可以用page指令的contentType属性来设置显示的编码方式.
html文件可以利用标签模拟请求消息头

而tomcat服务器是默认采用iso-8859-1来对请求消息进行解码的,如果前后不一就很容易出现乱码问题.

如果是post请求只需要设置request.setCharacterEncoding()与请求消息编码前的编码方式一样就可以.
如果是get请求,tomcat默认的是用iso-8859-1来进行解码, 此时request.setCharacterEncoding()不起作用,可以在tomcat的server.xml的Connector元素的useBodyEncodingForURI="true"使得起作用

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66850.html

相关文章

  • Servlet第四篇【request对象常用方法、应用】

    摘要:浏览器的中文数据提交给服务器,以编码对中文编码,当我在读取数据的时候,拿到的当然是乱码。接下来使用方式传递中文数据,把表单的方式改成即可当我们访问的时候,又出现乱码了于是我按照上面的方式,把对象设置编码为试试结果还是乱码。 什么是HttpServletRequest HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信...

    raise_yang 评论0 收藏0
  • AJAX入门这一篇就够了

    摘要:性能会有所降低一点内容,刷新整个页面用户的操作页面会中断整个页面被刷新了就是能够做到局部刷新三对象是中最重要的一个对象。头信息已经接收,响应数据尚未接收。 一、什么是Ajax Ajax(Asynchronous JavaScript and XML) 异步JavaScript和XML Ajax实际上是下面这几种技术的融合: (1)XHTML和CSS的基于标准的表示技术 (2)DOM进...

    tunny 评论0 收藏0

发表评论

0条评论

Fourierr

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<