文档章节

Tomcat后台中文乱码分析

yxzkm
 yxzkm
发布于 2016/12/27 15:44
字数 571
阅读 81
收藏 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
619
0
关于jsp访问路径带中文值需encodeURI两次的原因

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

文文1
2016/07/12
303
0
Tomcat7中文乱码,不做修改在Tomcat6下正常

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

紫轩阡陌
2013/02/24
3.1K
2
升级tomcat后出现的页面录入框中文乱码问题解决方法

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

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

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

花心雨
2015/05/19
508
1

没有更多内容

加载失败,请刷新页面

加载更多

一套基于SpringBoot+Vue+Shiro 前后端分离 开发的代码生成器

一、前言 最近花了一个月时间完成了一套基于Spring Boot+Vue+Shiro前后端分离的代码生成器,目前项目代码已基本完成 止步传统CRUD,进阶代码优化: 该项目可根据数据库字段动态生成 controll...

郑清
今天
7
0
javascript-十六进制随机颜色

<script> // 编写一个函数,获得一个十六进制的随机颜色的字符串(如#20CD4F) // function randomColor(){ // var r = random(0,255).toString(16); // var g = random(0,255).toString(16......

ACKo
今天
3
0
springBoot +mybatis 出现sql 语句在数据库可以查询到,但是赋值到实体类上就没有的情况?

1.不要老是反复查看自己是否写错了,为啥有的能出来有的出不来? 可以查看配置文件中是否配置全: 如果在application.yml 文件中是如下配置: mybatis: mapper-locations: classpath:mapp...

kuchawyz
今天
3
0
正则表达式

一、RegExp对象 进行验证和查找的API 1、创建对象: (1)用/创建(直接量):var reg=/正则/ig,表达式固定不变时使用 (2)用new创建:var reg=new RegExp(‘正则’,‘ig’),表达式需要...

wytao1995
今天
3
0
实战限流(guava的RateLimiter)

关于限流 常用的限流算法有漏桶算法和令牌桶算法,guava的RateLimiter使用的是令牌桶算法,也就是以固定的频率向桶中放入令牌,例如一秒钟10枚令牌,实际业务在每次响应请求之前都从桶中获取...

程序员欣宸
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部