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过滤器中获取参数值出现乱码

下面是服务器端中的过滤器获取参数的代码:

Java代码  

  1. public void doFilter(ServletRequest arg0, ServletResponse arg1,
  2. FilterChain arg2) throws IOException, ServletException {
  3. String foo=arg0.getParameter("foo");
  4. System.out.println(foo);
  5. arg2.doFilter(arg0, arg1);
  6. }

当我在浏览器输入“http//:localhost:8080/rest/test?foo=中国”时,浏览器会自动对"中国"进行URI转码,由于使 用的中文语言环境,浏览器会将“中国”转码为"%D6%D0%B9%FA"."D6D0","B9FA"分别"中","国"的GBK编码。等价于在 JAVA语言中作了如下操作

Java代码  

  1. URLEncoder.encode("中国","GBK")

传递到服务器后的URL实际为“http//:localhost:8080/rest/test?foo=%D6%D0%B9%FA”。

由于TOMCAT默认会对URL进行解码,并且使用的是ISO-8859-1字符集,如下所示

Java代码  

  1. URLDecoder.decode("%D6%D0%B9%FA","ISO-8859-1");

因为编码和解码使用的是不同的字符集,所以解码出来的字符串肯定是不对的,故而使用如下方式获取参数值时出现乱码。

Java代码  

  1. String foo=request.getParameter("foo");

 2.resteasy的service方法中获取参数出现乱码

Java代码  

  1. @GET
  2. @Path("/test")
  3. public void hello10(@QueryParam(value="foo") String foo) {
  4. System.out.println(foo);
  5. }

resteasy中获取到request参数foo的机制与前面的filter略有不同。foo参数的是值由resteasy框架进行类似如下处理后获得的。

Java代码  

  1. String params=request.getQueryString();
  2. System.out.println(params);//foo=%D6%D0%B9%FA
  3. String encodedParams= URLDecoder.decode(params,"UTF-8");
  4. ......

通过getQueryString()方式获得的参数并没有被TOMCAT解码过,但被resteasy框架进行了解码,当传入参数不是以UTF-8编码的话获取到的参数就可能是乱码

3.总结

使用request.getParameter方式获得的参数是已经经过web服务器解码的

使用request.getQueryString可以获得未解码的原始参数

对于tomcat解码造成的乱码问题可以通过2种途径解决

修改tomcat配置文件设置解码方式

服务器端对于获取到的参数进行new String(param.getBytes("ISO-8859-1"),"页面指定编码")转换

时间: 2024-11-13 04:53:27

Tomcat get 中文乱码的相关文章

Tomcat日志中文乱码问题解决

Tomcat 日志中文乱码 在配置文件/usr/local/tomcat/bin/catalina.sh大概在230多行左右添加绿框内容,注释红框内容,重启Tomcat即可解决乱码问题 Tomcat服务器记录日志(Logger)出现中文乱码问题,解决办法:修改Tomcat的bin目录下的catalina.sh文件,找到以下代码:if [ -z "$LOGGING_MANAGER" ]; thenJAVA_OPTS="$JAVA_OPTS -Djava.util.logging

IDEA中 tomcat 控制台中文乱码解决 及GsonUtils无法转换时间格式

IDEA中 tomcat 控制台中文乱码解决 1.找到tomcat 安装目录下的 conf /logging.properties 文件打开 2.将 java.util.logging.ConsoleHandler.encoding = UTF-8 修改为 java.util.logging.ConsoleHandler.encoding = GBK 3.保存后 重启idea ————————————————GsonUtils需添加时间模式 datePattern指定模式 原文地址:https:

Tomcat解决中文乱码

一.中文乱码原因 Tomcat默认是按ISO-8859-1进行URL解码,ISO-8859-1并未包括中文字符,中文字符不能被正确解析了. 二.配置编码 在tomcat的conf/server.xml下的connetor属性中增加URIEncoding或者useBodyEncodingForURI属性 (1)URIEncoding This specifies the character encoding used to decode the URI bytes, after %xx decod

Docker容器部署tomcat出现中文乱码

docker 容器部署tomcat后,日志文件中出现中文乱码,很多问号,中文的文件夹也是问好.先看看容器的locale: [[email protected] ~]# docker exec -it 41de9a0b6045 locale LANG= LC_CTYPE="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="

Tomcat下中文乱码的解决方法

1,在web中,传递参数到servlet中,一般有两种形式,第一种是form表单提交,一种是超链接传值.form表单提交可以选择method是post还是get方式,默认是get方式.超链接是get方式.  当提交数据是表单形式时,method是post方式时,通过使用过滤器request.setCharacterEncoding("UTF-8");就可以解决中文乱码.  当提交数据是表单形式时,method是get方式时或者是超链接时,光使用过滤器是不行的,可以在tomcat中 &l

j2ee、mvn、eclipse、Tomcat等中文乱码问题解决方法

一.更改jdk默认编码为UTF-8,保证启动的JVM不会出现中文乱码问题 1.在编译的时候,如果我们没有用 -encoding 参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们操作系统默认采用的编码格式. JDK首先获得操作系统的file.encoding参数(它保存的就是操作系统默认的编码格式,如WIN7,它的值为GBK),当我们不加设置就编译时,相当于 使用了参数:javac -encoding gbk XX.java,当然就会出现不兼容的情况. 2.下面看一幅图:

tomcat下中文乱码的问题

今天在修改项目时, 并没有搜索到结果,控制台就报乱码的错误,如下: <pre name="code" class="java"><span style="font-size:14px;">Java Hibernate: select count(*) as col_0_0_ from PJEDU_SITE site0_ where (site0_.TITLE like '%?±?é?¨%') and (site0_.SIT

TomCat网页中文乱码解决方案

中文乱码如下图: 步骤1.修改tomcat下的server.xml文件,如我的tomcat安装路径是/usr/local/apache-tomcat-8.5.27,则修改/usr/local/apache-tomcat-8.5.27/conf/server.xml,将8080端口的配置添加URIEncoding="UTF-8",如下图: 保存退出后再打开网页,发现还是乱码.修改server.xml可以改正jsp的乱码情况,但并不能改正html的中文乱码情况. 步骤2.在html的<

Tomcat解决中文乱码并部署项目

1.在Tomcat下的server.xml中添加URIEncoding="UTF-8"(解决中文乱码的问题) 2.在Tomcat下的server.xml中添加<Context docBase="F:\workspace\cppdy\WebContent" path="/cppdy" reloadable="true"/>(Tomcat部署本地项目) docBase="项目路径" path=&qu

idea中springboot内置tomcat控制台中文乱码解决

在使用idea的时候,在springboot中使用内置的tomcat控制台中中文乱码,这个问题困扰我好长时间了,今天终于解决了 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <ex