Tomcat 处理请求时的中文乱码问题
利用Tomcat8作为服务器,采用servlet接收前端请求后进行处理的过程中,前台请求中有中文时,中文信息变成了乱码。
经过调试和查阅,发现Tomcat在处理get请求和post请求是有区别的。参照网上的各种说法,进行一下实验:
jsp页面与后台采用的都是utf-8编码,所以只对utf-8的编码方式进行比较,对比的代码如下:
String name=request.getParameter("username");
String param=new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
System.out.println(name+" "+param);
测试:
1.chrome浏览器 post请求 请求编码未设置
前端jsp页面设定为utf-8编码,结果name为乱码 param可以正确解析。网上查到post请求tomcat的默认的编码方式是iso-8859-1所以会出现如上结果
2.ie浏览器 post请求 请求编码未设置
结果与前完全相同name为乱码 param可以正确解析
3.chrome浏览器 get请求 请求编码未设置
结果是name可以正确解析,param为乱码 可见上来的请求时utf-8的,和前端页面一致
4.ie浏览器 get请求 请求编码未设置
结果和之前相同,name可以正确解析,param为乱码
之后又尝试了前端采取gbk方式编码的测试。现在直接说结果吧
结论
对于Tomcat服务器post请求是按照iso-8859-1进行编码的,get请求则是按照前端页面的编码方式编码的
那么,我们在实际使用中,保证前后端编码格式一致是很有必要的,可以避免很多麻烦,要么都用gbk,要么都用utf-8
如果一致了,那么get请求就可以直接进行解析,但是post请求还得进行处理。如果采用了如下代码
request.setCharacterEncoding("UTF-8");
那么post请求之后就可以直接获取参数,或者可以直接用
String param=new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
这篇文章只是简单的进行了一下实验和分析,肯定还有不足和遗漏的地方,希望大家多多指教
ps 再补充一点,在实验过程中,springmvc中返回为了方便用了@ResponseBody注解,返回中文时也出现了乱码,发现springmvc默认采用的iso-8859-1,所以返回字符串可以用
return new String("你好".getBytes(), "ISO-8859-1");
Tomcat 处理请求时的中文乱码问题的更多相关文章
- Servlet处理get请求时的中文乱码问题
我们都知道,使用Servlet处理get请求时,如果get请求的参数中有中文,直接接收会是乱码,这个时候我们使用类似下面的语句来处理乱码: 12345 String name = request.ge ...
- action接收到来自jsp页面的请求时出现中文乱码问题处理方法
写JSP程序时,在Servlet中取请求参数时出现了乱码,当然,这种乱码问题再简单不过了.由于在JSP中使用了GBK作用页面的编码,那么提交的中文信息自然也会被按着GBK进行编码,为%xx格式的GBK ...
- mock请求时出现中文乱码的解决
请求返回的乱码如图: 原mock代码如下 [ { "description":"这是我们的第一个mock例子", "request":{ & ...
- [MacOS] 终端使用ssh时,中文乱码问题处理
终端显示中文问题处理: vim ~/.inputrc 加入以下代码 set meta-flag on set convert-meta off set input-meta on set output ...
- get方式请求会出现中文乱码。post方式不会。
get方式请求会出现中文乱码.post方式不会. 如果是要解决get方式中文乱码问题,就需要做一个拦截器,或者在web.xml做一个get请求的配置 来自为知笔记(Wiz)
- 解决在Linux下安装Oracle时的中文乱码问题
本帖最后由 TsengYia 于 2012-2-22 17:06 编辑 解决在Linux下安装Oracle时的中文乱码问题 操作系统:Red Hat Enterprise Linux 6.1数据库:O ...
- 如何解决http请求返回结果中文乱码
如何解决http请求返回结果中文乱码 1.问题描述 http请求中,请求的结果集中包含中文,最终以乱码展示. 2.问题的本质 乱码的本质是服务端返回的字符集编码与客户端的编码方式不一致. 场景的如服务 ...
- (转)MySQL 插入数据时,中文乱码问题的解决
MySQL 插入数据时,中文乱码问题的解决 原文:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html 当向 MySQL 数据库插 ...
- IDEA使用maven构建时控制台中文乱码的解决办法
使用maven clean install 项目时控制台中文乱码,解决办法如下: Setting->maven->runner VMoptions: -Dfile.encoding=UTF ...
随机推荐
- 【转】delphi程序只允许运行一个实例的三种方法:
一. 创建互斥对象 在工程project1.dpr中创建互斥对象 Program project1 Uses Windows,Form, FrmMain in 'FrmMain.pas' ...
- JS中Date对象getYear()方法和getFullYear()方法区别
释义 JavaScript getFullYear() 方法 getFullYear() 方法可返回一个表示年份的 4 位数字. getYear() 语法 dateObject.getFullYear ...
- 循环repeater中的每一列,并计算数据和
<asp:Repeater ID="rpt" runat="server"> <ItemTemplate> <td>< ...
- zabbix自定义键值原理
子配置文件的配置 为了便于维护和分类管理,UserParameter的内容可以单独写一个配置文件 # vim /usr/local/zabbix/etc/zabbix_agentd.conf Incl ...
- python基础数据类型
整形:(不可变类型) >>> a = 123>>> type(a)<class 'int'> 长整形:(在python3中已经废弃了) >> ...
- Html - SPA页面收集(有图)
场景,左图,又字段的布局 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- java 找出字符串之间的字符
package lia.meetlucene; import java.io.IOException; import java.util.ArrayList; import java.util.Arr ...
- $_ 与 $PSItem
PowerShell 3.0 中的$PSItem 此文章于2012年11月4日发表在PowershellPowershell小技巧并加以Powershell 3.0管道的标签 by Mooser Le ...
- linux查看时间和修改时间
查看当前时间,date -R 设置时间 date -s 例如当前时间2014年11月3日17:22:48 date -s 11/3/2014 date -s 17:22:48 先设置日期后设置具体时间 ...
- Markdown基本用法
Markdown基本用法 不同的编辑器对本文中的功能可能显示情况不一样,马克飞象可以完美支持和显示. 一.标题 h1标题 #h1标题 h1标题 h1标题 == h2标题 ##h2标题 h2标题 h2标 ...