乱码问题

原因:

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

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

  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语言中作了如下操作

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

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

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

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

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

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

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

  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框架进行类似如下处理后获得的。

  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"),"页面指定编码")转换

Tomcat get 中文乱码的更多相关文章

  1. Servlet学习之Tomcat控制台中文乱码问题

    Tomcat控制台中文乱码问题 在更新了IDEA2020.1版本后,可以安装官方的简体中文插件,方便我们日常使用,但是更新后再运行Tomcat时,控制台的输出日志出现中文乱码问题,接下来告诉大家如何修 ...

  2. tomcat项目中文乱码问题解决方法

    在部署tomcat项目时经常会遇到中文乱码问题,解决的方法可参考以下步骤. 1.更改Tomcat安装目录下的conf\server.xml,指定浏览器的编码格式为"utf-8"格式 ...

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

    1.在Tomcat下的server.xml中添加URIEncoding="UTF-8"(解决中文乱码的问题) 2.在Tomcat下的server.xml中添加<Context ...

  4. Tomcat启动中文乱码解决方法

    一:解决方法一: 1.查看电脑系统的编码 针对Windows平台下,点击运行--输入cmd,enter键进入命令窗口,输入:chcp可以得到操作系统的代码页信息(代码页:字符集编码的别名),可以从控制 ...

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

    一.更改jdk默认编码为UTF-8,保证启动的JVM不会出现中文乱码问题 1.在编译的时候,如果我们没有用 -encoding 参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们 ...

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

    docker 容器部署tomcat后,日志文件中出现中文乱码,很多问号,中文的文件夹也是问好.先看看容器的locale: [root@docker1 ~]# docker exec -it 41de9 ...

  7. IntelliJ IDEA控制台启动Tomcat输出中文乱码问题

    IntelliJ IDEA控制台输出中文乱码问题 1. 先解决Tomcat中文乱码问题 参考  Tomcat 输出日志出现中文乱码 2. 解决Idea配置问题 打开IntelliJ IDEA本地安装目 ...

  8. TomCat控制台中文乱码及IDEA设置为UTF-8

    一.解决IDEA中的中文乱码 1.首先设置idea编辑器的编码: File-Setting设置如下 idea显示编码:windows默认用gbk所以idea显示默认为gbk编码,在 Help--Edi ...

  9. idea配置tomcat及中文乱码解决

    放在前面:不要使用tomcat10,访问自己的页面会报404错误,目前无解,在这个坑爬了一下午,最终换了tomcat 9才解决.所以我选择了tomcat 9 + idea 2021.2版本 配置步骤: ...

随机推荐

  1. Js_闭包跟作用域

    作用域的嵌套将形成作用域链,函数的嵌套将形成闭包.闭包与作用域链是 JavaScript 区别于其它语言的重要特性之一. 作用域 JavaScript 中有两种作用域:函数作用域和全局作用域. 在一个 ...

  2. hdu 2036:改革春风吹满地(叉积求凸多边形面积)

    改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  3. Python对Selenium调用浏览器进行封装包括启用无头浏览器,及对应的浏览器配置文件

    """ 获取浏览器 打开本地浏览器 打开远程浏览器 关闭浏览器 打开网址 最大化 最小化 标题 url 刷新 Python对Selenium封装浏览器调用 ------b ...

  4. [T-ARA][Tic Tic Toc]

    歌词来源:http://music.163.com/#/song?id=22704478 Tic Tic Toc RA Tic Tic Toc RA [Tic Tic Toc RA Tic Tic T ...

  5. PHP学习 例外和错误处理

    <?phptry{ open_folder("C:\\book");}catch(Exception $ex) { echo 'Error Message:'.$ex-> ...

  6. 20135327郭皓——Linux内核分析第二周 操作系统是如何工作的

    操作系统是如何工作的 上章重点回顾: 计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的 ...

  7. nginx安装(转发)

    Nginx("engine x")是一款轻量级的HTTP和反向代理服务器.相比于Apache.lighttpd等,它具有占有内存少.并发能力强.稳定性高等优势.它最常见的用途就是提 ...

  8. Fibbing以让虚结点的设置更简单为目的优化网络需求

  9. PAT----1001. A+B Format (20)解题过程

    1001. A+B Format (20) github链接 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B Calculate a + b and output t ...

  10. Java的4种保留4位小数的方法(转)

    上网查到的4种方法 其实刚学java……谁知道java里面的这么多方法啊……java里面重要的包本来就不少啊 ……跟我学粤语的小徒弟问我的东东…… 写两种方式……直接在main函数里面写的.还有就是利 ...