我打算开始使用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. }

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

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

    URL编码问题 问题描述 使用 Tomcat 开发一个 Java Web 项目的时候,相信大多数人都遇到过url出现中文乱码的情况,绝大多数人为了避免出现这种问题,所以设计 url 一般都会尽量设计成 ...

  2. maven构建项目时硬编码中文乱码问题解决

    场景:1. 项目采用maven作为构建工具.2. 前端页面为jsp,由前端团队独立完成,添加编码配置:<%@ page contentType="text/html;charset=u ...

  3. tomcat7解决jsp参数传递的中文乱码问题

    解决jsp参数传递的中文乱码问题 制作人:全心全意 在jsp页面中,通过参数传递传递中文时,在显示参数值时中文内容变成了乱码.这是因为请求参数的文字编码方式与页面中的不一致造成的,所有的request ...

  4. 解决使用tomcat服务器发布web项目时出现URL中文乱码的问题

    打开Tomcat的安装路径 打开server.xml文件 在修改端口号的一行既是下图中位置添加 URIEncoding="UTF-8" 就能替换在用eclipse或者myeclip ...

  5. ACTIVEMQ监控项目admin队列详情中文乱码

    一.使用ACTIVEMQ队列,传入ObjectMessage时,监控项目admin无法解析消息信息,需要将消息javabean打成jar放入lib文件夹中,重启ACTIVEMQ,注意javabean要 ...

  6. tomcat7.0在centos7下中文乱码问题解决汇总

    1. 系统级的中文设置 Centos7跟之前的6和5安装的中文字符命令都不一样 [root@iZ25bdzgev8Z ~]# locale #查看当前系统的语言环境 [root@iZ25bdzgev8 ...

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

    最近在centos6.5下部署web项目时网页出现中文乱码的问题,在排除掉php之后,把问题锁定在mysql的编码方式上. 解决方法如下: 首先进入mysql命令行,输入命令:SHOW VARIABL ...

  8. springmvc里面的中文乱码问题

    如果是以get方法提交的表单,则可以在comcat服务器的server.xml文件里面设置 <Connector connectionTimeout="20000" port ...

  9. AJAX中文乱码PHP完美解决(IE和Firefox兼容)

    最近在做一个项目,遇到AJAX中文乱码问题,经过一个下午的努力终于完美解决,现将心得写下来,希望对那些还困绕在这个问题而头痛不已的人们有所帮助. 众所周知,使用AJAX传送和接收中文参数时,如果不在客 ...

随机推荐

  1. RNN概述-深度学习 -神经网络

    一 RNN概述    前面我们叙述了BP算法, CNN算法, 那么为什么还会有RNN呢?? 什么是RNN, 它到底有什么不同之处? RNN的主要应用领域有哪些呢?这些都是要讨论的问题. 1) BP算法 ...

  2. tensorflow学习笔记(4)-学习率

    tensorflow学习笔记(4)-学习率 首先学习率如下图 所以在实际运用中我们会使用指数衰减的学习率 在tf中有这样一个函数 tf.train.exponential_decay(learning ...

  3. parity 注记词

    spousal tint untold around rosy daintily unrated sheep choice showpiece chirping gala

  4. SpringCloud IDEA 教学 (五) 断路器控制台(HystrixDashboard)

    写在开头 断路器控制台是为了查看断路器运行情况而研发的.本章介绍了断路器控制台的搭建,代码基于之前Client的搭建.HystrixDashboard基于之前配置好的,使用了HystrixComman ...

  5. Coursera-Note: Internet History, Technology and Secure (1st week to 9th week)

    目录 Coursera-Note: Internet History, Technology and Secure 第一周 第二周 数据交换: Packet switching技术: 第三周 创造ht ...

  6. lol人物模型提取(四)

      在淘宝上联系了一个3d打印服务的卖家,他要我转成stl.obj.xt.xst.igs任意一种格式给他发过去,我就把它转成了obj格式给他发过去了.   然后他那边打开是这样的,没有贴图,看上去模型 ...

  7. Python35 升级 pip

    使用pip安装插件的时候报错: You are using pip version 8.1.1, however version 9.0.1 is available.You should consi ...

  8. SpringBoot Web(SpringMVC)

    入门工程: package com.example.demo.controller; import com.example.demo.entity.User; import org.springfra ...

  9. 【bzoj1026】[SCOI2009]windy数 数位dp

    题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 输入 包含两个整数 ...

  10. Javascript 中 == 和 === 区别是什么?

    Javascript 中 == 和 === 区别是什么? 作者:Belleve链接:https://www.zhihu.com/question/31442029/answer/77772323来源: ...