GET请求参数中文乱码的解决办法
POST请求参数中文乱码,一般使用编码拦截器就可以解决,但是GET请求是地址栏传参,这些配置就没办法解决了。而java项目一般部署在tomcat上,第一种方式就是修改tomcat的配置文件,达到中文乱码的问题,如下:
<!-- 修改前 -->
<Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /><!-- 修改后 -->
<Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UFT-8" />
这种方式对于本地测试,或者部署拥有shell权限的服务器,是比较简单的,但是遇到购买web空间的站点,修改起来就没有那么容易啦,当然,你也可以选择tomcat 8及其以上的服务器空间;这些服务器默认解码方式是UTF-8。
即使是这样,有时候,我们也不想用户直接看到用户地址栏中存在一大串的中文,这样体验也不好。如果你有这样的需求,那么下面这种这样将是一个比较好的实现方式:
js请求数据前做编码处理
<script>// 这里要看清,两次encodeURI(),第一次将字符串转换为十六进制,第二次,修改转移符号(%)window.location.href = 'localhost:8080/dev/main?name' + encodeURI(encodeURI("小明"));
</script>
java后台接收参数处理
// 接收参数
String name = request.getParameter("name");
// 将接收到的参数做decode转换,还原(%)的转移字符,并以UTF-8进行解码字符串
name = URLDecoder.decode(name, "UTF-8");
如果我们有很多种种问参数这样传参,是不是很麻烦呢;如果你使用了springMVC,那么你可以注册一个自定义参数解析器,解析参数的时候,直接进行URI转换,并赋值。
这样是解决后端接收的问题了,但是前端呢?如果你使用可ajax的工具,例如axios等一些工具,也可以在请求拦截器中,重新对请求的参数进行编码
总结
URLDecoder和URIencode是比较简单的解决方式,但是真正做到项目时,我们未必能想得到,因为我们使用大量的框架,最直接的解决方式一般会去想框架有没有解决。
encodeURI和decodeURI
encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码.
UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号.
假设我们传参为“中国”,这解码方式如下
1.第一次encodeURI,按照utf-8方式获取数组[-28, -72, -83, -27, -101, -67],其中前三个为“中”,后三个为“国”;遍历数组,将数组转化为16进制[E4, B8, AD, E5, 9B, BD],最后添加上百分号[%E4, %B8, %AD, %E5, %9B, %BD],现在已经分解为单字节符。
2.第二次encodeURI,进行编码,这是会处理%号这个转义字符。不处理%以外的字符,他会把%编码为%25,这样数组就变成了最终的[%25E4, %25B8, %25AD, %25E5, %259B, %25BD],然后提交服务器。
3.服务器调用getParameter拿到请求参数为[%25E4, %25B8, %25AD, %25E5, %259B, %25BD],服务器会使用URLDecode进行处理;第一次处理不管是按照UTF-8,还是GBK,还是ISO-8859的格式编码的,都会得到[%E4, %B8, %AD, %E5, %9B, %BD],因为这一次只对%进行去转移符;然后再使用UTF-8解码一次,就得到我们的中文字符了。
GET请求参数中文乱码的解决办法相关推荐
- SpringMVC表单请求参数的绑定,配置编码过滤器解决请求参数中文乱码问题,自定义类型转换器
文章目录 SpringMVC的参数绑定支持的数据类型 基本数据类型和字符串类型 JavaBean 包装类 Map类型 List类型 POST请求参数中文乱码的解决方法 自定义类型转换器(Date类 ...
- 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ①定义一个类,实现被装饰对象的接口 ②定义一个成员变量 ...
- linux unzip乱码,Linux 中unzip解压时中文乱码的解决办法
Linux 中unzip解压时中文乱码的解决办法 Linux 中unzip解压时中文乱码的解决办法 当我们在linux中解压一个含有中文名字的压缩包如"资料.zip"时,如果直接使 ...
- 前端请求参数中文乱码问题
1.以post方式提交 以post方式提交的请求参数中文乱码问题可以通过后端的编码过滤器解决. 可以直接使用springMVC中的编码过滤器,只需在web.xml中添加过滤器的配置即可. <fi ...
- GET方式请求参数中文乱码问题 [JavaWeb][Servlet]
请求参数中文乱码问题(GET) 同样的我们要解决GET方式下的请求参数中文乱码问题,那么我们首先要知道GET请求方式之下为什么中文数据就会出现乱码? 因为我们GET方式之下的请求参数是在请求行中,是紧 ...
- freetds php mssql 中文乱码,PHP读取mssql json数据中文乱码的解决办法
PHP及网页使用UTF-8编码,数据库是sql server2008,使用默认编码(936,即GBK编码) 当读取数据库数据时,使用php自带的json_encode()返回到前端,结果中文不显示. ...
- Odoo12导出文件中文乱码的解决办法
在odoo12中导出来的csv文件,用excel打开时中文乱码. 解决办法: 1.先用记事本打开,你会发现中文能正常显示,此时另存为时,编码选ANSI,保存: 2.excel打开,中文可以正常显示了
- HttpClient4.x中GET方式发送请求参数中文乱码处理
HttpClient4.x GET 方式发送请求参数中文乱码处理 (非返回结果乱码) 之前尝试对HttpGet对象添加头部字符编码设置均无效,后改用参数字符编码处理后实现请求参数乱码正确处理. Htt ...
- MYSQL使用UTF8中文乱码终极解决办法
转自:http://wenku.baidu.com/view/d2d4f15ba8114431b80dd81f.html MYSQL使用UTF8中文乱码终极解决办法 作者:刘明灵 liumingl ...
- Ubuntu系统中文乱码的解决办法
Ubuntu系统中文乱码的解决办法 文章目录 Ubuntu系统中文乱码的解决办法 1. 安装中文语言 2. 安装语言设置的命令locale 3. 安装中文的相关字体 4. 修改语言的环境变量 4.1 ...
最新文章
- 【CV】图像分割二十年,盘点影响力最大的10篇论文
- thymeleaf 中文文档
- spring中的设计模式_面试:设计模式在spring中的应用
- 7.Mysql数据库表引擎与字符集
- SQL Server “Denali” ---SQL 2012 新特性
- Infortrend新技术解决高效与节能的矛盾
- c语言编程的现状,C语言编程开发发展现状分析
- c语言编译器安装到c盘吗,PE安装到C盘的详细教程
- 谷歌或Edge浏览器在开始菜单页面不显示图标
- 雷电模拟器打开应用权限_雷电模拟器超级用户权限怎么设置,是什么,怎么关闭【获取超级用户权限】通知提示,如何自动允许...
- 看了那些 Google 大神 Jeff Dean 的传说后,我跪了!
- python 跨行字符串_python字符串结束的标志_python-7-字符串的操作_方法_format_列表的操作...
- 【论文阅读】Pyramidal Convolution:Rethinking Convolutional Neural Networks for Visual Recognition
- 【php学习之路】微信公众帐号
- 拼团返利电商系统(拼返系统)v2.6
- 前端表格导出为excel方法合集
- springboot操作ES之ElasticSearch_EasyEs
- python control控制系统仿真再更新:使用内外环系统进行垂直起降飞行器横向控制仿真
- 贪心算法的最优解条件
- springboot执行批量插入_springboot2.1.8+elasticsearch7.3.2(三),添加文档,批量添加文档...
热门文章
- python 正则表达式语法大全_Python正则表达式知识汇总
- java 中国地图_Echarts+Java生成百度统计中国地图详细教程-Fun言
- 计算机等级考试Excel总成绩,计算机等级考试EXCEL练习题-6公务员考试成绩表
- 电源完整性之Cadence Sigrity Power DC_电热协同仿真
- 免费IP切换工具有用吗?
- 常用元器件使用方法3:电平转换芯片74LVC1T45的使用方法
- JS工具类(一):DateUtil.js
- [R语言] R语言快速入门教程
- Linux工具篇 | Ubuntu安装balenaEtcher镜像刻录工具
- adb远程(异地)连接实现投屏