关于tomcat在idea上的中文编码问题
一、问题引入
在国内,无论是新手还是有一定码龄的开发人员,汉字编码问题一直都是绕不开的魔咒,本文主要对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上的中文编码问题的更多相关文章
- 17.[CVE-2017-12615]Tomcat任意文件上传漏洞
[CVE-2017-12615] Tomcat任意文件上传漏洞 首先先贴出wooyun上的一个案例:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0 ...
- SampleDateFormat 高并发下导致 线程 Blocked 从而导致 Tomcat 吞吐一直上不去
SampleDateFormat 高并发下导致 线程 Blocked 从而导致 Tomcat 吞吐一直上不去
- java环境--JDK和Tomcat在linux上的安装和配置
Tomcat在Linux上的安装与配置 以下使用的Linux版本为: Redhat Enterprise Linux 7.0 x86_64,Tomcat版本为tomcat-7.0.54.1.下载JDK ...
- 【tomcat】不同域名解析到同一tomcat不同项目上
问题: 1. 有多个域名,想输入的每个域名只能访问其中的一个项目 2. 这些项目都部署在同一个tomcat上的 解决步骤: 1.首先把所有域名都解析到这台服务器上,解析时只能填写ip地址,不 ...
- 改变Tomcat在地址栏上显示的小猫图标
部署在Tomcat上的项目通常在地址栏会显示一个小猫的图标,那么如何改变这个图标呢? 第一步.制作自己显示的图标 这里使用的是在线制作的方式,推荐一个在线制作的网站---比特虫:http://www. ...
- Tomcat 在 Linux 上的安装和配置
一.文件上传 先上传tomcat安装文件到Linux服务器 二.解压安装 使用以下命令解压安装包 .tar.gz 解压成功会生成一个文件夹 tomcat服务器运行时是需要JDK支持的,所以必须先安装好 ...
- Tomcat任意文件上传漏洞CVE-2017-12615
文章来源:https://blog.csdn.net/qq1124794084/article/details/78044756 漏洞影响的tomcat版本为tomcat7.0.0-7.0.81版本 ...
- Tomcat CVE-2017-12615 远程上传漏洞复现
漏洞名称:CVE-2017-12615-远程代码执行漏洞 CVE-2017-12615:远程代码执行漏洞 当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 r ...
- 关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)
一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...
- 【转】关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)
一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...
随机推荐
- MonoDevelop 的续集dotdevelop
DotDevelop 是一个跨平台的 .NET 集成开发环境(IDE),它原本是 MonoDevelop 的分支项目,这个项目更侧重于 Linux 支持和 GTK3 升级,github:https:/ ...
- 第22天:安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用
#数据库操作-mysqli函数&增删改查 PHP函数:连接,选择,执行,结果,关闭等 参考:https://www.runoob.com/php/php-ref-mysqli.html 常用: ...
- GPT-SoVITS语音合成模型实践
1.概述 GPT-SoVITS是一款开源的语音合成模型,结合了深度学习和声学技术,能够实现高质量的语音生成.其独特之处在于支持使用参考音频进行零样本语音合成,即使没有直接的训练数据,模型仍能生成相似风 ...
- 01-react的基本使用
// 导入react和react-dom包 类似 vue 中的 import vue from 'vue' import react from 'react' // 内部的组件 import reac ...
- 03 什么是预训练(Transformer 前奏)
博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...
- Android复习(五)设备兼容—>屏幕适配
1. 适配使用的布局 目前版本Google还是希望开发者通过 ConstraintLayout 布局完成适配 2. 对于特定屏幕 创建备用布局,即在res/layout/目录下创建对应尺寸的布局文件 ...
- 一文详述:AI 网关与 API 网关到底有什么区别?
近年来AI 发展火热,大模型已经成为推动各行各业业务创新和增长的关键力量.随之而来问题是"企业该如何安全管理和部署AI应用的挑战?"AI基础架构的设计不仅要支持现有的业务需求,还要 ...
- python实现链表(单链,双链)
# code:utf-8 # createTime:2023.8.17 # -------------------------------------------------------------- ...
- druid连接池报错:sql injection violation, multi-statement not allow
druid连接池报错:sql injection violation, multi-statement not allow 需要配置druid的 multi-statement-allow属性为tru ...
- 云原生周刊:使用 ChatGPT 提高安全性
虽然 ChatGPT 最近因网络犯罪分子使用该技术加强攻击而成为负面新闻,但它也可以成为网络防御的强大资产,帮助公司最大限度地提高安全态势,同时弥合其员工的技能差距. 云安全联盟 (CSA) 最近发布 ...