Tomcat7项目迁移到Tomcat8中文乱码问题

我打算开始使用Tomcat8了,先解决中文乱码问题,在解决其它的问题!

个人推荐:修改server.xml方式

对于SpringMVC报的错误我稍后在补充问题

1.问题描述

Tomcat 7下项目切换到Tomcat 8后,出现乱码。 无论Google还是百度,多数解决方法是server.xml设置URIEncoding=”UTF-8”,这种配置为了解决GET请求的中文乱码问题。 对于Tomcat 7下遇到乱码问题,这样配置是正确的;但是对”Tomcat 7正常,切换到Tomcat 8”乱码的情况无效。

2. 解决方案[个人不喜欢]

Tomcat8的server.xml配置Connector节点添加属性URIEncoding=”ISO-8859-1”。

参考: http://tomcat.apache.org/migration-8.html

3. 官方文档解释

https://tomcat.apache.org/tomcat-7.0-doc/config/http.html

URIEncoding

This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used.

https://tomcat.apache.org/tomcat-8.0-doc/config/http.html

URIEncoding

This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, UTF-8 will be used unless the org.apache.catalina.STRICT_SERVLET_COMPLIANCE system property is set to true in which case ISO-8859-1 will be used.

Tomcat7对URI默认编码是ISO-8859-1

Tomcat8对URI默认编码是UTF-8

4. 关于编码问题

4.1 Tomcat7这个URI默认的编码带来很多问题,下面这个应该很常见:

  1. new String(value.getBytes("ISO-8859-1"), param);

如果server.xml配置上URIEncoding=”UTF-8”就不需要了。 进而项目直接迁移到Tomcat8,不修改server.xml,或者再次加上URIEncoding=”UTF-8”也是不会有问题。

4.2 Tomcat8是不是就是因为开发者服务端转码麻烦,URI默认的编码改为”UTF-8”。

对于在Tomcat8开发项目,就简单很多,不需要上面的那段繁琐的代码。但是从Tomcat7迁移上来的项目,要么,去掉上面的代码,要么server.xml添加URIEncoding=”ISO-8859-1”,浪费Tomcat8一番美意。

4.3 当然,通过判断参数值是否乱码,进行编码也是很不错的

  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;
  3. public class ChineseUtill {
  4. private static boolean isChinese(char c) {
  5. Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
  6. if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
  7. || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
  8. || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
  9. || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
  10. || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
  11. || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
  12. return true;
  13. }
  14. return false;
  15. }
  16. public static boolean isMessyCode(String strName) {
  17. Pattern p = Pattern.compile("\\s*|\t*|\r*|\n*");
  18. Matcher m = p.matcher(strName);
  19. String after = m.replaceAll("");
  20. String temp = after.replaceAll("\\p{P}", "");
  21. char[] ch = temp.trim().toCharArray();
  22. float chLength = 0 ;
  23. float count = 0;
  24. for (int i = 0; i < ch.length; i++) {
  25. char c = ch[i];
  26. if (!Character.isLetterOrDigit(c)) {
  27. if (!isChinese(c)) {
  28. count = count + 1;
  29. }
  30. chLength++;
  31. }
  32. }
  33. float result = count / chLength ;
  34. if (result > 0.4) {
  35. return true;
  36. } else {
  37. return false;
  38. }
  39. }
  40. public static String toChinese(String msg){
  41. if(isMessyCode(msg)){
  42. try {
  43. return new String(msg.getBytes("ISO8859-1"), "UTF-8");
  44. } catch (Exception e) {
  45. }
  46. }
  47. return msg ;
  48. }
  49. }

来自为知笔记(Wiz)

时间: 2024-10-12 10:52:36

Tomcat7项目迁移到Tomcat8中文乱码问题的相关文章

关于使用Tomcat搭建的Web项目,出现 URL 中文乱码的问题解析

URL编码问题 问题描述 使用 Tomcat 开发一个 Java Web 项目的时候,相信大多数人都遇到过url出现中文乱码的情况,绝大多数人为了避免出现这种问题,所以设计 url 一般都会尽量设计成都是英文字符.但总避免一种情况就是当你的系统中拥有搜索功能时,你无法预料到用户输入的是中文还是其他符号,此时还是会存在中文乱码的问题,那么为什么会产生中文乱码问题,下面给大家详细解析. 什么是 URL URL 叫统一资源定位符,也可以说成我们平时在地址栏输入的路径.通过这个url(路径)我们可以发送

暑期项目经验(十一)--网页中文乱码问题

网页中文乱码问题 做项目时,不可避免的会碰到中文显示为乱码为问号的情形.网上讲得方法很多,不尽相同.反正我的做法是: 1.修改tomcat中server.xml, 找到Connectotr,在里面加上URIEncoding="UTF-8" <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443

KEIL项目迁移IAR向导(中文)

项目迁移向导 从Keil µVision® forARM平台转为 IAR Embedded Workbench® for ARM平台 本文使用的项目例程所采用的IDE版本如下: 项目迁移概述 从现有的Keil µVision项目的进行迁移需要收集关于当前的项目信息,并使用这些信息创建新的IAR Embedded Workbench项目.此外,还需要对实际源代码进行一些修改.本指南介绍一种简化了这一过程的方法. 注:IAREmbedded Workbench的基本介绍以及IDE项目管理和ARM项目

IDEA创建maven项目时控制台输出中文乱码?

在网上找了很多方法,搞了好一会才解决(我自己粗心造成的),现在来总结一下: 1.IDEA-Help-Edit Custom VM Options-粘贴一句话: -Dfile.encoding=utf-8 然后重启. 2.File-Settings-Editor-FileEncodings中的三个选项都设置为UTF-8: 3.找到IDEA安装路径下的bin目录中的idea.exe.vmoptions和idea64.exe.vmoptions文件,打开并在末尾加入-Dfile.encoding=UT

centos6.5环境下的web项目mysql编码方式导致的中文乱码问题

最近在centos6.5下部署web项目时网页出现中文乱码的问题,在排除掉php之后,把问题锁定在mysql的编码方式上. 解决方法如下: 首先进入mysql命令行,输入命令:SHOW VARIABLES LIKE 'character_set_%',会出现下面这些信息 +--------------------------+----------------------------+| Variable_name            | Value                      |

Get,Post请求中文乱码问题有效解决方法

对于做Java WEB项目同学来说,中文乱码问题是一个经常遇到而又非常头痛的问题,而最容易出现乱码的环节就是在浏览器向服务器发送请求的过程,至于出现乱码的原因不是本文的关注的重点,想了解的朋友可以参考 http://zhaomin819111.blog.163.com/blog/static/10659004200943112950956/ 本文主要介绍如何有效解决web请求中的乱码问题,其实解决方法有很多种,不同的请求类型解决方法也不相同. 本文只介绍最方便的一种: 1.针对Post方式提交的

springmvc里面的中文乱码问题

如果是以get方法提交的表单,则可以在comcat服务器的server.xml文件里面设置 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>,并重启服务器即可,不能用request.setCharacterEncoding(&

eclipse+tomcat7解决项目中文乱码的一个思路

1. 在代码层面进行编码的修改操作,参考博文的方法一:http://www.cnblogs.com/longshiyVip/p/4873058.html 2. 如果项目使用了struts2等前端框架,可以利用框架的一些编码过滤器进行编码转换工作. 3. eclipse环境本身进行配置UTF-8编码的工作,参考博文方法二:http://www.cnblogs.com/longshiyVip/p/4873058.html 和博文:http://www.cnblogs.com/longshiyVip/

解决eclipse中导入项目中文乱码的问题

在平时开发的过程中,导入别人的项目学习或者二次开发的经历相信大家都有,但是导入项目之后出现中文乱码的问题相信也困扰了不少人,当里面内容少的时候还可以通过复制粘贴解决,但项目内容多的时候就头痛了. 教大家一个间的快捷的方法 首先导入的文件成为了乱码是因为workspace的编码方式不对,linux下默认编码是UTF-8,windows的是GBK, 那么怎么修改workspace的编码方式呢 很简单在window----preference---workspace可以设置只要把编码改成utf-8就能