Tomcat get 中文乱码
乱码问题
原因:
tomcat默认的在url传输时是用iso8859-1编码。
解决方案一:
在使用get传输参数时,将参数中的中文转换成url格式,也就是使用urlEncode和urlDecode来传输,使用这种方式就是把中文转换成以%开头的编码在url中传输。
使用这种方法时,要注意两点。
1.前台使用urlencode,在后台相应的使用urldecode。
2.使用urlencode的内容是参数内空。千万要注意,他是会把等于号等符号也给转换了。所以,最好是先把参数传换后再进行拼接。而不是把url拼接好再去转换。
解决方案二:
配置tomcat,使用其在url传输过程中使用相应的支持中文的编码。一般国内的喜欢用gbk或gb2312。我个人建议使用utf-8
在tomcat的/conf/server.xml文件中,找到以下这一行。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
这行的意思也就是使用8080端口来接收html的请求。在这里可以加几个参数来配置不同的效果。
URIEncoding="UTF-8" 设置url传输时对url内容的编码格式
compression="on" 打开压缩功能
compressionMinSize="2048" 启用压缩的输出内容大小,这里面默认为2KB
noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩
compressableMimeType="text/html,text/xml" 压缩类型
对于要解决乱码来说,改成以下就行
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
转:
经过分析,使我对TOMCAT的处理机制和HttpServletRequest有了更加深入的认识。
1.filter过滤器中获取参数值出现乱码
下面是服务器端中的过滤器获取参数的代码:
- public void doFilter(ServletRequest arg0, ServletResponse arg1,
- FilterChain arg2) throws IOException, ServletException {
- String foo=arg0.getParameter("foo");
- System.out.println(foo);
- arg2.doFilter(arg0, arg1);
- }
当我在浏览器输入“http//:localhost:8080/rest/test?foo=中国”时,浏览器会自动对"中国"进行URI转码,由于使 用的中文语言环境,浏览器会将“中国”转码为"%D6%D0%B9%FA"."D6D0","B9FA"分别"中","国"的GBK编码。等价于在 JAVA语言中作了如下操作
- URLEncoder.encode("中国","GBK")
传递到服务器后的URL实际为“http//:localhost:8080/rest/test?foo=%D6%D0%B9%FA”。
由于TOMCAT默认会对URL进行解码,并且使用的是ISO-8859-1字符集,如下所示
- URLDecoder.decode("%D6%D0%B9%FA","ISO-8859-1");
因为编码和解码使用的是不同的字符集,所以解码出来的字符串肯定是不对的,故而使用如下方式获取参数值时出现乱码。
- String foo=request.getParameter("foo");
2.resteasy的service方法中获取参数出现乱码
- @GET
- @Path("/test")
- public void hello10(@QueryParam(value="foo") String foo) {
- System.out.println(foo);
- }
resteasy中获取到request参数foo的机制与前面的filter略有不同。foo参数的是值由resteasy框架进行类似如下处理后获得的。
- String params=request.getQueryString();
- System.out.println(params);//foo=%D6%D0%B9%FA
- String encodedParams= URLDecoder.decode(params,"UTF-8");
- ......
通过getQueryString()方式获得的参数并没有被TOMCAT解码过,但被resteasy框架进行了解码,当传入参数不是以UTF-8编码的话获取到的参数就可能是乱码
3.总结
使用request.getParameter方式获得的参数是已经经过web服务器解码的
使用request.getQueryString可以获得未解码的原始参数
对于tomcat解码造成的乱码问题可以通过2种途径解决
修改tomcat配置文件设置解码方式
服务器端对于获取到的参数进行new String(param.getBytes("ISO-8859-1"),"页面指定编码")转换
Tomcat get 中文乱码的更多相关文章
- Servlet学习之Tomcat控制台中文乱码问题
Tomcat控制台中文乱码问题 在更新了IDEA2020.1版本后,可以安装官方的简体中文插件,方便我们日常使用,但是更新后再运行Tomcat时,控制台的输出日志出现中文乱码问题,接下来告诉大家如何修 ...
- tomcat项目中文乱码问题解决方法
在部署tomcat项目时经常会遇到中文乱码问题,解决的方法可参考以下步骤. 1.更改Tomcat安装目录下的conf\server.xml,指定浏览器的编码格式为"utf-8"格式 ...
- Tomcat解决中文乱码并部署项目
1.在Tomcat下的server.xml中添加URIEncoding="UTF-8"(解决中文乱码的问题) 2.在Tomcat下的server.xml中添加<Context ...
- Tomcat启动中文乱码解决方法
一:解决方法一: 1.查看电脑系统的编码 针对Windows平台下,点击运行--输入cmd,enter键进入命令窗口,输入:chcp可以得到操作系统的代码页信息(代码页:字符集编码的别名),可以从控制 ...
- j2ee、mvn、eclipse、Tomcat等中文乱码问题解决方法
一.更改jdk默认编码为UTF-8,保证启动的JVM不会出现中文乱码问题 1.在编译的时候,如果我们没有用 -encoding 参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们 ...
- Docker容器部署tomcat出现中文乱码
docker 容器部署tomcat后,日志文件中出现中文乱码,很多问号,中文的文件夹也是问好.先看看容器的locale: [root@docker1 ~]# docker exec -it 41de9 ...
- IntelliJ IDEA控制台启动Tomcat输出中文乱码问题
IntelliJ IDEA控制台输出中文乱码问题 1. 先解决Tomcat中文乱码问题 参考 Tomcat 输出日志出现中文乱码 2. 解决Idea配置问题 打开IntelliJ IDEA本地安装目 ...
- TomCat控制台中文乱码及IDEA设置为UTF-8
一.解决IDEA中的中文乱码 1.首先设置idea编辑器的编码: File-Setting设置如下 idea显示编码:windows默认用gbk所以idea显示默认为gbk编码,在 Help--Edi ...
- idea配置tomcat及中文乱码解决
放在前面:不要使用tomcat10,访问自己的页面会报404错误,目前无解,在这个坑爬了一下午,最终换了tomcat 9才解决.所以我选择了tomcat 9 + idea 2021.2版本 配置步骤: ...
随机推荐
- io整理
http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html
- Final发布 文案+美工展示
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2476项目地址:https://coding.net/u/wuyy694/ ...
- java实验报告一
一.实验内容 1. 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试Java程序 二.实验步骤 (一)命令行下Java程序开发 1. 首先双击桌面上的Xface终 ...
- 一个java实现的简单的4则运算器
有些基础知识有欠缺,补一下,顺便练习一下java import com.sun.deploy.util.ArrayUtil; import java.util.*; public class Main ...
- asp.net 网页拉伸 到300%不变形方法一
网页拉伸到300%控件和表格不会出现太大变形 方法: 1.对主页面采用百分比宽度(Width="100%") 2.对于表格使用百分比宽度,包括表格宽度和表格中顶端td宽度 3.对t ...
- js页面实时显示时间
1.通过getMonth()实现获取月份,从0开始计数,需要+1: 2.通过getDay()实现获取星期天数,从0开始,0表示星期日: 3.通过getDate()获取日期. 4.setTimeout( ...
- mark1-git
Administrator@-20131003RY MINGW64 ~ $ pwd /c/Users/Administrator Administrator@-20131003RY MINGW64 ~ ...
- 校园社交网站app
1.项目说明 1.1 项目背景 虽然公共社交网络系统能够满足大多数高校校园用户在校园网络社交的需求,但是针对校园学习.工作和文化生活等方面的支持以及学校个性化需求方面却存在不足.利用电子校务平台的数据 ...
- vs2013的安装与使用 测试
vs2013软件我去年已经用过,可是当时只是鉴于对于c语言的编程,并没有觉得好用,况且好多的功能自并没有去深入研究,所以当时对于这个软件还是排斥的.安装的时候是别人帮我装的,所以并没有在安装的过程有问 ...
- CentOS下搭建Hive
目录 下载解压hive mysql驱动 配置文件 hive-env.sh hive-site.xml 首次启动hive 使用schemaTool初始化mysql数据库 错误总结 警告汇总 参考:htt ...