我打算开始使用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. CryptoZombies学习笔记——Lesson5

    chapter1:token代币 简而言之,通证就是支持交易的包含一系列规范的函数接口的一个智能合约,发币可以用ERC20标准,但是像僵尸这种非同质化代币,需要用ERC721标准 chapter2:e ...

  2. 6.hdfs的存储过程

    1.hdfs 怎么存储 切割存储 2. 为何每块是128m 与io读写速度有关,一般人的接受速度1s中,而磁盘的读写速度为100m/s,在读取文件时候需要硬盘寻找地址,一般读懂速度和寻找之间的比例是1 ...

  3. POJ 2177 Ghost Busters(三维几何)

    Description The famous Ghost Busters team has decided to upgrade their Ectomobile (aka Ecto-1) with ...

  4. Android框架 与 源码结构

    一. Android 框架 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android运行环境层; -- 应用框架层; -- 应 ...

  5. <Effective C++>读书摘要--Accustoming Youself to C++

    <Item 1>View C++ as a federation of languages. 1.把C++看成4种子语言组成,即C.Object-Oriented C++.Template ...

  6. 【APS.NET Core】- Razor Page 使用jqgrid实现分页功能

    本文将使用jqgrid在Razor Page中实现分页功能. 前台 List.cshtml代码如下: @page @model ListModel @{ Layout = "~/Pages/ ...

  7. using指令含义

    using指令作用: 就是导入命名空间,这样你比如用StringBuilder类,就不用System.Text.StringBuilder builder = new System.Text.Stri ...

  8. delphi怎样单步调试

    在delphi的IDE编辑窗口里,主菜单->Run->Step Over或者主菜单->Run->Trace Into单步调试有两种方式:一种是Step Over,快捷键是F8, ...

  9. android四大组件(一)Activity

    一.创建一个新的Activity 1.android的四大组件都要在清单文件里面配置 2.如果想让你的应用有多个启动图标,你的activity需要这样配置 <intent-filter> ...

  10. es6常用基础合集

    es6常用基础合集 在实际开发中,ES6已经非常普及了.掌握ES6的知识变成了一种必须.尽管我们在使用时仍然需要经过babel编译. ES6彻底改变了前端的编码风格,可以说对于前端的影响非常巨大.值得 ...