一、问题引入

在国内,无论是新手还是有一定码龄的开发人员,汉字编码问题一直都是绕不开的魔咒,本文主要对tomcat在jetbrain系列产品idea上的乱码问题提供解决经验。

二、详情描述

新手在初学Java Web时,兴致冲冲的安装了tomcat 10.x.x 或其他版本→idea新建web项目→试运行:

大段的红色乱码信息,冲击着初学者的心灵。

虽然不会实际开发造成影响,但看着这些云里雾里的信息时还是挺~影响心情的。

淇℃伅 --> 信息

鍛戒护琛屽弬鏁帮細 --> 命令行参数:

三、问题分析

在以前的 javase 学习中,中文乱码问题是通过统一编码的方式解决的(GBK和UTF-8)。

但如下图所示,很明显这次绝对不像之前那样能轻松解决。我们可以看到在idea的console下的输出出现了两种(可能不止两种)不同的流,且两种不同的流使用了两种不同的编码格式。(即白色的你好!Hello!!!可以正常显示,而红色的信息却是乱码)

这里解释一下:「你好!Hello!!!」这部分信息是我在代码里写的System.out.println("你好!Hello!!!");其他是Tomcat的输出的日志信息。

综上,问题的解决方案应该从Tomcat下手。

四、解决方案

方法一

作者在遇到这个坑的时候一开始是从问题的根本下手的,既然会出现中文乱码问题那么直接让Tomcat输出英语不就解决了吗!

于是就从网络上找到了解决方法;

Tomcat启动时会检查本地语言环境,来调用对应的i18n文本,中文环境默认会显示中文日志,但在终端中容易出现乱码,虽然乱码问题可以通过修改字符集处理,还是想尝试一下改成英文输出。刚研究了一下,发现可以通过修改参数来设置输出日志的语言,将运行参数中的语言环境设置为英文即可,在此记录一下修改步骤

此文档所使用的环境如下

Server version name: Apache Tomcat/9.0.62

OS Name: Windows 10

JVM Version: 1.8.0_301-b09

修改catalina

修改bin/catalina.bat文件,其中有一项关于CATALINA_LOGGING_CONFIG的配置,大约是230行,不同版本所在行不一样,大致在那个区间

if not "%CATALINA_LOGGING_CONFIG%" == "" goto noJuliConfig
set CATALINA_LOGGING_CONFIG=-Dnop
if not exist "%CATALINA_BASE%\conf\logging.properties" goto noJuliConfig
set CATALINA_LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
:noJuliConfig

将其中的set语句后面添加language配置-Duser.language=en -Duser.region=US,如下

set CATALINA_LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties" -Duser.language=en -Duser.region=US

注意空格。

提示:如果是在Linux系统,则修改bin/catalina.sh文件

修改时间格式

顺便改一下显示日志中的时间格式,修改conf/logging.properties,在ConsoleHandler区添加timeFormat配置

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = UTF-8 org.apache.juli.OneLineFormatter.timeFormat = yyyy-MM-dd HH:mm:ss

重启Tomcat检查修改是否生效。

作者:zhouf_cq

链接:https://www.jianshu.com/p/da8386129a50

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

不得不说,直接改成英文一定是乱码问题的通解。(直接绕开问题

但是作者一直都有一个坏毛病(X,就是喜欢把所有工具更到最新。

于是就在我的第一次更新Tomcat的时候,它又变成了中文。

Tomcat更新时,会把之前辛苦配置的文件覆盖掉,每次都要改一遍。对于我这种懒人来说,一行命令更新后,我可不想重新再修改一遍(这个不是配置文件,更新后可能会有变动不适合直接copy)。

于是,我就在idea上花费了一番功夫。

方法二

我把idea上的配置全部统一成了utf-8。

文件编码

上面是之前学javase的解决的方法。这次只要在上面的设置基础上添加一个设置。

setting→Editor→General→Console下,修改成UTF-8

Default Encoding 修改成UTF-8

OK

重启Tomcat

可以看到Tomcat日志输出正常了

五、后续问题

之前的问题这里并没有完全解决,可以看到System.out.println("你好!Hello!!!");输出的中文变成了乱码。

我们只要在idea里面配置一下项目配置就可以了。

在此处(红色的框)添加一句VM option 参数就可以了。

-Dfile.encoding=UTF-8

完美解决!

-Dfile.encoding=UTF-8这条参数很常见。

写在最后

关于tomcat在idea上的中文编码问题的更多相关文章

  1. 17.[CVE-2017-12615]Tomcat任意文件上传漏洞

    [CVE-2017-12615] Tomcat任意文件上传漏洞 首先先贴出wooyun上的一个案例:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0 ...

  2. SampleDateFormat 高并发下导致 线程 Blocked 从而导致 Tomcat 吞吐一直上不去

    SampleDateFormat 高并发下导致 线程 Blocked 从而导致 Tomcat 吞吐一直上不去

  3. java环境--JDK和Tomcat在linux上的安装和配置

    Tomcat在Linux上的安装与配置 以下使用的Linux版本为: Redhat Enterprise Linux 7.0 x86_64,Tomcat版本为tomcat-7.0.54.1.下载JDK ...

  4. 【tomcat】不同域名解析到同一tomcat不同项目上

    问题: 1. 有多个域名,想输入的每个域名只能访问其中的一个项目 2. 这些项目都部署在同一个tomcat上的 解决步骤:      1.首先把所有域名都解析到这台服务器上,解析时只能填写ip地址,不 ...

  5. 改变Tomcat在地址栏上显示的小猫图标

    部署在Tomcat上的项目通常在地址栏会显示一个小猫的图标,那么如何改变这个图标呢? 第一步.制作自己显示的图标 这里使用的是在线制作的方式,推荐一个在线制作的网站---比特虫:http://www. ...

  6. Tomcat 在 Linux 上的安装和配置

    一.文件上传 先上传tomcat安装文件到Linux服务器 二.解压安装 使用以下命令解压安装包 .tar.gz 解压成功会生成一个文件夹 tomcat服务器运行时是需要JDK支持的,所以必须先安装好 ...

  7. Tomcat任意文件上传漏洞CVE-2017-12615

    文章来源:https://blog.csdn.net/qq1124794084/article/details/78044756 漏洞影响的tomcat版本为tomcat7.0.0-7.0.81版本 ...

  8. Tomcat CVE-2017-12615 远程上传漏洞复现

    漏洞名称:CVE-2017-12615-远程代码执行漏洞 CVE-2017-12615:远程代码执行漏洞 当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 r ...

  9. 关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)

    一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...

  10. 【转】关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)

    一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...

随机推荐

  1. JavaScript – Fetch

    前言 上一篇 JavaScript – XMLHttpRequest 有提到 XMLHttpRequest 正在被 Fetch 取代,这篇就继续介绍 Fetch 吧. 参考 阮一峰 – Fetch A ...

  2. Windows 调试工具课程

    本文是我在集团内部上的课程记录而成的博客内容.在本次课程里面将和大家介绍一些在 Windows 上常用的调试工具,以及调查问题的常见套路.适合于伙伴们入门 Windows 调试 本文以下内容是采用原本 ...

  3. 阿里云Centos7修改MariaDB数据库连接时间,解决连接mysql报Too many connection的问题

    在测项目的时候突然发现数据库连接不上了,提示Too many connection. 产生问题的原因是MySQL的Sleep进程占用了大量的连接,当时是重启mysql解决的这个问题!后来又配置了连接池 ...

  4. 使用阿里云 SpringBoot 仓库初始化项目

    本文基于:https://www.bilibili.com/video/BV15b4y1a7yG?p=5&vd_source=cf8900ba33d057d422c588abe5d5290d ...

  5. 77.const声明对象修改对象里面的值会触发报错吗

    不会,因为对象是复杂类型数据 :对象的地址保存在栈内存中,对象的数据保存在堆内存中 : 只要对象的地址不发生改变,无论堆内存的对象数据如何改变,对象的值就不会改变 :

  6. flink jobmanager 终止任务失败问题

    flink jobmanager 终止任务失败问题 :root { --default-font: ui-sans-serif, -apple-system, BlinkMacSystemFont, ...

  7. SLAM中的各种地图

    1.地图的不同分类方式 地图有多种不同的分类方式,网上有不少帖子介绍各种各样的地图,但并没有非常完整的总结地图应该怎么分类.论文[1]中将地图分成以下几种:拓扑地图.度量地图.度量-语义地图和混合地图 ...

  8. 噢!JavaScript (2):对数组要小心使用delete

    最近在重写我自己的静态博客生成器,虽然遇到的小问题挺多,但今早这个问题令我印象深刻. 发现问题 博客的文章基础数据储存在main.json中,其中专门有数组dateindex来储存经过排列后的文章顺序 ...

  9. 2024CSP-J游记

    拿到题的第一步,先看第一题,大致扫了一眼,水题.以为是hash,进一步思考了一下,hash不行.发现可以用set,于是拿set敲了一下,样例全对. 第二题,看了眼样例以为是DFS.实际看了看发现是模拟 ...

  10. fiddler限速配置&mock配置

    一.限速配置 1.开启性能选项 2.找到对应的参数入口 3.修改对应的从参数 解释下 这2个参数是如何做到限速的 4.request-trickle-delay(上传数据限制) 默认值是300,他的意 ...