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默认的编码带来很多问题,下面这个应该很常见:
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”。
new String(value.getBytes("ISO-8859-1"), param);
如果server.xml配置上URIEncoding=”UTF-8”就不需要了。 进而项目直接迁移到Tomcat8,不修改server.xml,或者再次加上URIEncoding=”UTF-8”也是不会有问题。
对于在Tomcat8开发项目,就简单很多,不需要上面的那段繁琐的代码。但是从Tomcat7迁移上来的项目,要么,去掉上面的代码,要么server.xml添加URIEncoding=”ISO-8859-1”,浪费Tomcat8一番美意。
4.3 当然,通过判断参数值是否乱码,进行编码也是很不错的
import java.util.regex.Matcher;import java.util.regex.Pattern;public class ChineseUtill {private static boolean isChinese(char c) {Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {return true;}return false;}public static boolean isMessyCode(String strName) {Pattern p = Pattern.compile("\\s*|\t*|\r*|\n*");Matcher m = p.matcher(strName);String after = m.replaceAll("");String temp = after.replaceAll("\\p{P}", "");char[] ch = temp.trim().toCharArray();float chLength = 0 ;float count = 0;for (int i = 0; i < ch.length; i++) {char c = ch[i];if (!Character.isLetterOrDigit(c)) {if (!isChinese(c)) {count = count + 1;}chLength++;}}float result = count / chLength ;if (result > 0.4) {return true;} else {return false;}}public static String toChinese(String msg){if(isMessyCode(msg)){try {return new String(msg.getBytes("ISO8859-1"), "UTF-8");} catch (Exception e) {}}return msg ;}}
Tomcat7项目迁移到Tomcat8中文乱码问题的更多相关文章
- 关于使用Tomcat搭建的Web项目,出现 URL 中文乱码的问题解析
URL编码问题 问题描述 使用 Tomcat 开发一个 Java Web 项目的时候,相信大多数人都遇到过url出现中文乱码的情况,绝大多数人为了避免出现这种问题,所以设计 url 一般都会尽量设计成 ...
- maven构建项目时硬编码中文乱码问题解决
场景:1. 项目采用maven作为构建工具.2. 前端页面为jsp,由前端团队独立完成,添加编码配置:<%@ page contentType="text/html;charset=u ...
- tomcat7解决jsp参数传递的中文乱码问题
解决jsp参数传递的中文乱码问题 制作人:全心全意 在jsp页面中,通过参数传递传递中文时,在显示参数值时中文内容变成了乱码.这是因为请求参数的文字编码方式与页面中的不一致造成的,所有的request ...
- 解决使用tomcat服务器发布web项目时出现URL中文乱码的问题
打开Tomcat的安装路径 打开server.xml文件 在修改端口号的一行既是下图中位置添加 URIEncoding="UTF-8" 就能替换在用eclipse或者myeclip ...
- ACTIVEMQ监控项目admin队列详情中文乱码
一.使用ACTIVEMQ队列,传入ObjectMessage时,监控项目admin无法解析消息信息,需要将消息javabean打成jar放入lib文件夹中,重启ACTIVEMQ,注意javabean要 ...
- tomcat7.0在centos7下中文乱码问题解决汇总
1. 系统级的中文设置 Centos7跟之前的6和5安装的中文字符命令都不一样 [root@iZ25bdzgev8Z ~]# locale #查看当前系统的语言环境 [root@iZ25bdzgev8 ...
- centos6.5环境下的web项目mysql编码方式导致的中文乱码问题
最近在centos6.5下部署web项目时网页出现中文乱码的问题,在排除掉php之后,把问题锁定在mysql的编码方式上. 解决方法如下: 首先进入mysql命令行,输入命令:SHOW VARIABL ...
- springmvc里面的中文乱码问题
如果是以get方法提交的表单,则可以在comcat服务器的server.xml文件里面设置 <Connector connectionTimeout="20000" port ...
- AJAX中文乱码PHP完美解决(IE和Firefox兼容)
最近在做一个项目,遇到AJAX中文乱码问题,经过一个下午的努力终于完美解决,现将心得写下来,希望对那些还困绕在这个问题而头痛不已的人们有所帮助. 众所周知,使用AJAX传送和接收中文参数时,如果不在客 ...
随机推荐
- 关闭Tomcat进程 一条语句(必看)
写在开始 MAC系统下进行JAVA研发,经常遇到的一个问题就是杀死异常Tomcat 通常都是用两条指令,先查询出Tomcat占用的进程,再kill掉该进程, 其实有一种联合语句的方式可以一条语句直接关 ...
- POJ 2287 田忌赛马 贪心算法
田忌赛马,大致题意是田忌和国王赛马,赢一局得200元,输一局输掉200元,平局则财产不动. 先输入一个整数N,接下来一行是田忌的N匹马,下一行是国王的N匹马.当N为0时结束. 此题为贪心算法解答,有两 ...
- js经典试题之数据类型
js经典试题之数据类型 1:输出"B" + "a" + + "B" + "a"的值: 答案:BaNaNa. 分析:因为+ ...
- 软件工程 speedsnail 第二次冲刺9
20150526 完成任务:划线的优化,速度和谐: 遇到问题: 问题1 速度仍然不满意 解决1 未解决 明日任务: 蜗牛碰到线后速度方向的调整:(做优化)
- “今日校园” App 用户体验分析
一.背景 为进一步提升信息化应用水平,更好的服务师生,南通大学智慧校园移动端APP“今日校园”定于11月5日正式上线运行.登陆APP可浏览学校新闻.校园生活.各部门微信公众号等内容,查看校内通知.校内 ...
- A+B 输入输出练习I
while True: try: s=raw_input() a,b=s.split(' ') a,b=int(a),int(b) print a+b except EOFError: break A ...
- 【Linux】- vi/vim
所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正 ...
- Spring IOC原理简析
所谓IoC, 就是一个用XML来定义生成对象的模式. 1.现有三个类,Human是接口,Chinese是一个实现类,American是另一个实现类. 2.获取以上对象采用工厂模式的用法如下: 创建一个 ...
- Matlab快捷键
1. 在命令窗口(Command Window)中: 1) [上.下键]――切换到之前.之后的命令,可以重复按多次来达到你想要的命令 2) clc――清除命令窗口显示的语句,此命令并不清空当前工作区的 ...
- shmem:
在/proc/meminfo中发现,cached不等于ActiveFile + InActiveFile,我们来看看cache到底都包括啥内存 1)首先肯定包含activeFile 和 inactiv ...