关于tomcat在idea上的中文编码问题

news/2024/10/16 0:18:21

一、问题引入

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

二、详情描述

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

image

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

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

淇℃伅 --> 信息

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

三、问题分析

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

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

image

这里解释一下:「你好!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-8org.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。

文件编码

文件编码

image

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

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

image

Default Encoding 修改成UTF-8

image

OK

重启Tomcat

image

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

五、后续问题

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

image

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

image

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

-Dfile.encoding=UTF-8

image

完美解决!

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

写在最后

mrfz黍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/26400.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Python批处理:文件操作

一、为什么要使用python处理文件 文件处理管理可分为两种,一种是可视化、手动化,学习成本低,处理数量有限。另一种是编程化、自动化,有一定学习成本,可以基于逻辑处理。计算机的常项是对既定规则的发挥,这个发挥作用于"批量"这个层面。 二、相对路径与绝对路径…

开源相机管理库Aravis例程学习(六)——camera-features

本文针对官方例程中的:04-camera-features做简单的讲解目录简介例程代码函数说明arv_camera_get_integerarv_camera_get_string 简介 本文针对官方例程中的:04-camera-features做简单的讲解。并介绍其中调用的arv_camera_get_integer,arv_camera_get_string。 aravis版本:0…

sqlilabs通关02-中级篇:less23-37

less23:注释符绕过 先看代码 ​​可以看到对字符进行替换,将 #号和--替换成了空通过sql语句,可以知道闭合符号是单引号然后就可以开始尝试了,由于这关是get,直接修改url的参数即可 ?id=1 #正常访问 #绕过 ?id=1 and 1=1 ?id=1 and sleep(3)%20 and%20 1=1 #说明可以使…

中国39个行业产业链全景图

找了很久的各个行业产业链,今天终于发现这个整理得非常好的39个行业产业链全景图。主要行业基本都在里面了,每个行业上下游产业都包括哪些一张图你就看明白了! 新能源汽车产业链全景 机器人产业链全景图 房地产产业链全景图 稀土产业链全景图 电子竞技产业链全景图 钛白粉产…

Lettuce 实战之连接超时问题

问题 使用lettuce作为redis连接池,在访问redis时,偶尔会抛出RedisCommandTimeoutException,但隔一会儿又好了。 为什么lettuce有自动重连机制,却还是会出现连接超时的问题?为什么lettuce在连接断掉后,没有立即重连,而是需要等待十多分钟才重新连接? 在lettuce client和…

开源医疗大模型排行榜: 健康领域大模型基准测试

多年来,大型语言模型 (LLMs) 已经发展成为一项具有巨大潜力,能够彻底改变医疗行业各个方面的开创性技术。这些模型,如 GPT-3,GPT-4 和 Med-PaLM 2,在理解和生成类人文本方面表现出了卓越的能力,使它们成为处理复杂医疗任务和改善病人护理的宝贵工具。它们在多种医疗应用中…

一个用Python将视频变为表情包的工具

这是一个将视频转变为表情包的工具,现实生活中当我们看到一段搞笑的视频,我们可以将这段视频喂给这段程序,生成gif表情包,这样就可以用来舍友斗图了 1、一些限制 1、这个程序不能转化超过15秒以上的视频,因为占用的内存较高,会被终端杀死(除非你的计算机性能很好,也许1…

SpringBoot2.x整合Redis Sentinel

redis sentinel搭建之后,在spring-boot项目中集成。 配置 在pom.xml文件中添加如下依赖配置(这里spring-boot版本2.2.5),这个版本中,默认使用lettuce作为redis连接池。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spri…