文档章节

Tomcat后台中文乱码分析

yxzkm
 yxzkm
发布于 2016/12/27 15:44
字数 571
阅读 61
收藏 0

web应用程序在提交中文数据的时候,后台经常出现乱码现象。为了彻底分析产生原因,做了一个简单测试:

创建一个简单的java web应用程序,没有使用任何框架,部署在tomcat环境中。

使用谷歌和ie浏览器分别进行测试,测试结果如下:

Browser Method Tomcat URIEncoding httpServletRequest System.out
Chrome GET - - (乱码)
Chrome GET - setCharacterEncoding("gb2312") (乱码)
Chrome GET - setCharacterEncoding("utf-8") (乱码)
Chrome GET URIEncoding="gb2312"  - (乱码)
Chrome GET URIEncoding="gb2312"  setCharacterEncoding("gb2312") (乱码)
Chrome GET URIEncoding="gb2312"  setCharacterEncoding("utf-8") (乱码)
Chrome GET URIEncoding="utf-8"  - 中文正常显示
Chrome GET URIEncoding="utf-8"  setCharacterEncoding("gb2312") 中文正常显示
Chrome GET URIEncoding="utf-8"  setCharacterEncoding("utf-8") 中文正常显示
Chrome POST - - (乱码)
Chrome POST - setCharacterEncoding("gb2312") (乱码)
Chrome POST - setCharacterEncoding("utf-8") 中文正常显示
Chrome POST URIEncoding="gb2312"  - (乱码)
Chrome POST URIEncoding="gb2312"  setCharacterEncoding("gb2312") (乱码)
Chrome POST URIEncoding="gb2312"  setCharacterEncoding("utf-8") 中文正常显示
Chrome POST URIEncoding="utf-8"  - (乱码)
Chrome POST URIEncoding="utf-8"  setCharacterEncoding("gb2312") (乱码)
Chrome POST URIEncoding="utf-8"  setCharacterEncoding("utf-8") 中文正常显示
IE11 GET - - (乱码)
IE11 GET - setCharacterEncoding("gb2312") (乱码)
IE11 GET - setCharacterEncoding("utf-8") (乱码)
IE11 GET URIEncoding="gb2312"  - (乱码)
IE11 GET URIEncoding="gb2312"  setCharacterEncoding("gb2312") (乱码)
IE11 GET URIEncoding="gb2312"  setCharacterEncoding("utf-8") (乱码)
IE11 GET URIEncoding="utf-8"  - 中文正常显示
IE11 GET URIEncoding="utf-8"  setCharacterEncoding("gb2312") 中文正常显示
IE11 GET URIEncoding="utf-8"  setCharacterEncoding("utf-8") 中文正常显示
IE11 POST - - (乱码)
IE11 POST - setCharacterEncoding("gb2312") (乱码)
IE11 POST - setCharacterEncoding("utf-8") 中文正常显示
IE11 POST URIEncoding="gb2312"  - (乱码)
IE11 POST URIEncoding="gb2312"  setCharacterEncoding("gb2312") (乱码)
IE11 POST URIEncoding="gb2312"  setCharacterEncoding("utf-8") 中文正常显示
IE11 POST URIEncoding="utf-8"  - (乱码)
IE11 POST URIEncoding="utf-8"  setCharacterEncoding("gb2312") (乱码)
IE11 POST URIEncoding="utf-8"  setCharacterEncoding("utf-8") 中文正常显示

从上面的测试结果看出:

1.如果是GET请求,应在tomcat的server.xml中设置 URLEncoding="UTF-8" 。

2.如果是POST请求,请在后台设置 httpServletRequest.setCharacterEncoding("utf-8"); 或通过使用MVC框架并设置字符编码参数来解决乱码问题。

以下是测试页面代码:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>字符编码测试</title>
</head>
<body>
<form name="posttest" action="/posttest" method="post">
提交测试(POST): 
<input type="text" name="user" value="中文正常显示" />
<input type="submit" value="Submit" />
</form>
<br />
<a href="/gettest?user=中文正常显示">请点击这里进行GET测试</a>
</body>
</html>

 

© 著作权归作者所有

共有 人打赏支持
yxzkm
粉丝 1
博文 24
码字总数 8724
作品 0
西城
私信 提问
Java URL传参中文乱码问题

我们经常会遇到这样的场景:在URL中传递参数,如果该参数为中文,如果设置不当,会出现乱码问题。 URL传参所使用的编码为服务器中设置的编码,而ajax请求的编码为页面编码。 如果不设置tomca...

程序猿之小菜鸟
2015/08/28
504
0
Tomcat7中文乱码,不做修改在Tomcat6下正常

@红薯 你好,想跟你请教个问题:web应用从后台输出的中文出现乱码,页面写的中文显示正常,把容器换成Tomcat6中文显示正常,程序里面设定了编码为UTF-8,启动Tomcat7的时候控制台中文输出正常...

紫轩阡陌
2013/02/24
3.1K
2
关于jsp访问路径带中文值需encodeURI两次的原因

jsp往后台传值的时候,一般可以通过路径传值和ajax传值。 其中通过ajax post传值不会出现中文乱码现象,但路径传值如果不通过特殊的编码,后台可能获取到的是一串乱码。 encodeURI可以帮助我...

文文1
2016/07/12
184
0
升级tomcat后出现的页面录入框中文乱码问题解决方法

我把自己的web应用从tomcat5.0.30升级到5.5.26以后,发现页面的静态文字正常,但页面输入框输入中文后,在后台的action层检查发现中文变成乱码了,在5.5.26环境的action中使用下面的语句测试: S...

迷途d书童
2012/03/09
147
0
AEAIHR后台中文乱码

@aeaidp 你好,想跟你请教个问题: 我部署了你们的 系统后后台添加中文乱码 tomcat中已经加入URIEncoding="UTF-8" 数据库设置是utf8编码 hotweb.properties里dataSource.url=jdbc:mysql://l...

花心雨
2015/05/19
491
1

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
8
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
3
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
4
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
3
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部