【问题解决:配置】解决spring mvc项目 get请求 获取中文字符串参数 乱码

get类型请求的发送过程

前端发送一个get请求的过程:

  1. 封装参数
  2. 进行URL编码,也就是将中文编码成一个带有百分号的字符串,具体可以在这个网站进行测试。http://www.esjson.com/urlEncode.html

在这里插入图片描述

  1. 进行Http编码,这里浏览器或者postman都是默认用ISO-8859-1标准进行编码。
  2. Tomcat收到请求后,进行解码,这里Tomcat默认采用ISO-8859-1进行解码。然后再利用URL标准进行解码。两次解码之后,我们就还原了这个(中文)字符串。
  3. 然后再接口内部就可以使用解析出来的参数对象了。

仔细想一下,编码到底是用来做什么的?其实是为了节约空间,UTF-8,GBK等均采用了不同的算法来表示世界上所有的字符。

我们为什么要有这么多编码呢?因为世界上的语言太多啦,每种编码标准都或多或少的偏向某一种语言,比如GBK中的GB就是表示“国标”的意思,用它来编码汉字,比UTF-8更加节约空间。

但是用GBK来表示韩文呢?日文呢?未必有UTF-8高效,具体要根据他们的编码规则进行分析,这里只是举个例子。

而无论哪一种编码,它都要对应到最终的一个通用的字典里,这个貌似叫做Unicode字典,这个字典包含了全世界存在的所有字符,进而就得到了我们的对象。

为什么不直接传输Unicode编码?可以,但是传输起来不如编码节约空间,考虑Huffman编码。

写Java的门槛太低了,这些从业者在网上大肆发帖子,造成了良莠不齐的现象。之前在配置环境的时候为了解决win下开发spring项目的控制台乱码问题,参考了网上的一些帖子。结果稀里糊涂,把server.xml里的URIEncoding改成了UTF-8,这对于浏览器就不通用了,因为浏览器默认采用的就是ISO-8859-1进行编码。

因此,造成了乱码问题。

解决方案

找到Tomcat目录下的conf目录,然后进入,打开server.xml文件,找到第一个connector标签,检查里面是否存在 URIEncoding 这个属性,如果有,把里面设置的 URIEncoding 去掉:

    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"/>

注:由于时间仓促,本文没有深入进行校验文献,只是凭借着自己的一些基础知识理解写成,如有错误,欢迎评论区指出,谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherries Man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值