IDEA控制台乱码问题,原因解决方式,解决不了算我输

article/2025/9/30 16:53:34

IDEA 控制台乱码问题

文章目录

  • IDEA 控制台乱码问题
    • 为了节省大家时间, 直接展示下我的编码配置方案
      • 我的编码配置原则
      • 我的编码配置
    • 另外说一下几个重要但是和乱码无关的配置
    • 乱码原因
    • 解决方式
    • 我为什么推荐控制台使用 GBK
      • 我的编码设置思想
      • 第一种解决方案的弊端
      • end
    • 附加技巧
      • 如何找出具体乱码原因

关于这个乱码问题网上的解决方法大同小异, 但是即便你照着网上配置完之后, 也未必能够解决控制台乱码问题.

接下来由我从乱码角度来分析乱码问题, 让大家确保能够解决乱码问题.

为了节省大家时间, 直接展示下我的编码配置方案

我的编码配置原则

  1. 源码文件用于项目组之间进行版本控制, 一般用UTF-8

  2. 日志文件可能会用于在各个平台上查看, 一般用UTF-8

  3. 控制台编码对接你的电脑系统编码, 一般电脑默认是GBK

    因为我的电脑是Window10默认编码是GBK, 所以我控制台配置主打GBK

我的编码配置

  1. IDEA中 idea64.exe.vmoptions 中的 -Dfile.encoding 和 -Dconsole.encoding 的相关配置全部去除掉, 使用系统默认GBK即可.

    这个使用系统默认即可, 没必要一乱码就改这个, 你的乱码往往不是这个原因.在这里插入图片描述

  2. Run/Debug Configurations 中的 -Dfile.encoding 全部去除掉, 使用系统默认GBK即可.

    这个地方和上面 idea64.exe.vmoptions配置的都是VM这个参数, 这个比上面那个优先级更高,和上面的原因一样, JDK默认的已经很好了, 不需要配置这个 在这里插入图片描述
    这个地方会影响到控制台log日志, 以及文件日志编码, 但是未必一定要配置为UTF-8编码, 使用默认即可, 具体原因下面会讲

    = = = = = = = = = = = = = = = = 注 意 = = = = = = = = = = = = = = = = ================注意================ ================================

  3. 在你的项目中加上一句下面的代码, 看下打印的结果.

    System.out.println(System.getProperty("file.encoding"));
    
    • 如果此时打印的是GBK, 那么下面的控制台默认编码就是GBK.
    • 如果此时打印的是UTF-8, 那么下面的控制台默认编码就是UTF-8.

    之前使用IDEA2018, 2019的时候, 下面的结果应该是GBK, 但是用2020的时候, 有时却莫名其妙变成了UTF-8,

  4. tomcat路径下, \conf\logging.properties配置, 注意和控制台有关的Handler:java.util.logging.ConsoleHandler.encoding 改为第3步file.encoding输出的编码, 其它和文件有关的Handler全部UTF-8

    ############################################################
    # Handler specific properties.
    # Describes specific configuration info for Handlers.
    ############################################################1catalina.org.apache.juli.AsyncFileHandler.level = FINE
    1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
    1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
    1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-82localhost.org.apache.juli.AsyncFileHandler.level = FINE
    2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
    2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
    2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-83manager.org.apache.juli.AsyncFileHandler.level = FINE
    3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
    3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
    3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-84host-manager.org.apache.juli.AsyncFileHandler.level = FINE
    4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
    4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
    4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8java.util.logging.ConsoleHandler.level = FINE
    java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
    java.util.logging.ConsoleHandler.encoding = GBK
    

    因为一般web项目都是用到了tomcat, 因此tomcat也需要配置, 但实际上这个配置影响的只是tomcat相关的log文件
    至于这个地方为什么网上大多都是 GBK? 请往下看, 下面有解释

  5. 正确配置log配置文件编码(重要)

    • 终于到了我们最重要的环节, 我想说的是99%的乱码问题都是我们log配置文件没有配置好导致的, 结果大家不去改log配置文件, 偏偏盯上VM配置, 和tomcat配置.

    • 我想告诉大家的是, 人家IDEA, tomcat, JDK的默认配置明明已经很好了, 我们应该去适应人家, 而不是修改人家的默认配置来适应我们五花八门的log配置文件,

      例如:
      A的log配置的有问题, 导致IDEA控制台乱码了, 他修改了IDEA, tomcat, JDK配置, 成功强迫IDEA, tomcat, JDK配置适应它的他配置, 最终成功正确输出日志,
      之后B的log配置的也有问题, 日志也乱码了, 然后他参照A的配置配置之后, 发现乱码问题依然没有解决,

    • 要知道这个项目一个log配置, 那个项目一个log配置, 还有的log框架都不一样, 就算要强迫IDEA, tomcat, JDK适应我们的log配置文件, 由于我们的log配置文件不一样, 对应的被强迫的IDEA, tomcat, JDK配置也是不一样的

    • 因此为了统一配置方式, IDEA, tomcat, JDK 配置使用默认即可, 由我们的log配置来适应它们.

    下面是我的 log4j2.xml 部分示例配置, 如果你用的是log4j或logback或其它, 就参照相对的log框架的Appenders配置方法

    这里我为每个Appender 配置一下输出编码, 和控制台有关的:Console:charset 改为第3步file.encoding输出的编码, 其它和文件有关的RollingFile全部设置为UTF-8

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="DEBUG"><Appenders><!--这个输出控制台的配置,这里输出除了warn和error级别的信息到System.out --><Console name="Console" target="SYSTEM_OUT" follow="true"><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" /><!-- 输出日志的格式 --><PatternLayout charset="GBK" pattern="%m%n" /></Console><!-- 同一来源的Appender可以定义多个RollingFile,定义按天存储日志 --><RollingFile name="rolling_file" fileName="${logDir}/dust-server.log" filePattern="${logDir}/dust-server_%d{yyyy-MM-dd}.log"><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" /><!-- 输出日志的格式 --><PatternLayout charset="UTF-8" pattern="%m%n" /></RollingFile></Appenders><Loggers><Root level="all"><AppenderRef ref="Console"/><AppenderRef ref="rolling_file"/></Root></Loggers>
    </Configuration>
    

另外说一下几个重要但是和乱码无关的配置

  1. 项目配置

    这个地方挺重要的, 它控制着你整个项目java 文件编码, 配置文件编码, 新建文件编码.
    但是它和你的控制台乱码是毫无关系的, 就算你将这里的编码配置改成UTF-3.1415926, 它也管不到你的日志乱码 在这里插入图片描述


可能有很多人对上面的配置不理解 请继续往下看.


乱码原因

首先我们要知道什么是乱码, 简而言之乱码就是文件打开的编码方式和文件本身编码方式不对, 注意这个地方有两个编码, 一个是文件本身的编码, 一个是用什么编码打开文件, 两个编码不对应, 就会出现乱码.

例如以下图片(控制台乱码)

在这里插入图片描述

关于这个 淇℃伅, 我可以明确告诉你们这个是UTF-8编码信息, 那为什么会显示成淇℃伅呢, 是因为控制台以 GBK的方式显示UTF-8编码.

图片中的控制台乱码中的日志一般有两种, 一个是 tomcat 输出日志到控制台, 另一个是 jvm 输出日志到控制台., 网上关于解决控制台乱码的方法大都是 修改 jvm 输出日志编码tomcat 输出日志编码, 但是却忽视了一个重要的编码, 那就是 控制台是以什么编码方式显示信息的呢?.

关于这点我可以告诉你们, 一般来说, 中国电脑系统默认编码是 GBK, IDEA 控制台显示的编码也是 GBK.

现在是不是已经明白了, 也就是说控制台以 GBK 的方式打开了 tomcat 和 JVM 输出的 UTF-8 编码, 那不乱码才怪.

解决方式

既然如此, 那么解决方案就很明确了, 无非两种

  1. (不推荐)修改 IDEA 控制台显示编码为 UTF-8, 以及 tomcat, jvm 输出的日志编码也修改为 UTF-8;

    • toncat 安装路径下的 conf/logging.properties 配置文件中的 java.util.logging.ConsoleHandler.encoding 改成 UTF-8;
    • jvm 启动参数 VM options 加个配置 -Dfile.encoding=UTF-8
  2. (推荐)直接使用 IDEA 控制台显示的 GBK 编码, 把 tomcat, jvm 输出的日志编码也全部改为 GBK;

    • toncat 安装路径下的 conf/logging.properties 配置文件中的 java.util.logging.ConsoleHandler.encoding 改成 GBK;

    • jvm 启动参数 VM options 加个配置 -Dfile.encoding=GBK.

      如果你没有加乱七八糟的配置的话, 这个 jvm -Dfile.encoding 启动参数直接置空, 就会自动使用系统默认编码 GBK

我为什么推荐控制台使用 GBK

上面解决方式中, 第二种反而是我比较推荐的一种方式, 那有人就会问了, 全部改成 UTF-8 编码不好吗?

首先看下面的我的编码对接思想.

我的编码设置思想

输出位置编码方式原因
开发文件UTF-8为了和其它同事共同开发代码, 防止出现编码问题.
输出的 log 日志文件UTF-8为了便于和其它电脑对接, 和其它系统对接, 以及文件传输
控制台系统默认编码 GBK仅仅在自己电脑控制台显示, 说白了, 对接本地电脑, 而且本地的 JVM 使用的实际上也是你系统的默认编码, 你电脑是 GBK, 你就将输出到控制台的编码改成 JDK, 就行了.

第二种方法只要明白原理后, 实际上配置起来非常简单, 只要注意下控制台的编码是你电脑的默认编码即可.

第一种解决方案的弊端

第一种解决方案有什么弊端呢?

首先即便你更改了 IDEA 的控制台编码, tomcat 什么的也全部改成 UTF-8, 那么当你单独运行 tomcat 的时候, tomcat 会使用系统控制台打印日志, 那么系统控制台使用的编码是什么呢, 如果你用的是中国的 window, 那么编码格式 9 成 9 是 GBK, 因为这是你的系统默认编码, 无论是 tomcat, jvm, IDEA, 或者是其它开发软件或者是非开发软件, 编码对标的首先是你的电脑系统编码格式.

那么干脆点, 把整台电脑的编码全部改成 UTF-8 编码怎么样呢?

这绝对是个大工程量, 这不是随随便便就改的完的, 其次这会遇到很多问题, 听我一步步分析.

假如你在中国, 使用的是 window, 系统默认编码是 GBK.

  1. 首先你过去的文件, 软件使用的是 GBK 编码. 你之前写的文档, 写的笔记, 以及使用其它软件保存的文件大多都是 GBK, 改起来很麻烦.
  2. 其次网上的资源大多是 GBK, 或是一本小说, 一首歌的歌词, 或是游戏中文翻译包, 或者是视频字幕大多也都是 GBK, 这时候你碰到一个垃圾阅读器, 音乐视频播放器, 游戏软体, 它们不去识别文件 GBK 编码, 直接通过系统默认编码 UTF-8 打开, 然后就会出现乱码情况.
  3. 然后因为你的同事, 你的朋友它们电脑上大多都是 GBK 编码格式, 假如你们使用 git 或 svn 管理文档, 你使用 UTF-8 格式, 你同事大多不修改配置默认使用 GBK, 然后你觉得这样好吗? 哪怕你的编辑器能自动识别编码, 你拉娶个gbk编码文件, 改动保存后, 再以utf-8格式推送出去… 然后一个文档项目就出现了两种编码. 甚至你做个设计流程图, 建个带中文注释的数据表, 同步到你朋友的电脑上, 打开, 卧槽, 乱码了.
  4. 最后, GBK 存储汉字占用空间更小, 非开发工作没有必要使用UTF-8.

end

那么一个公司全部将电脑编码改成 UTF-8 不行吗?

可以啊, 只要你们公司要求这样就可以, 只要电脑是公司统一发放的就可以, 只要你们公司同事都愿意改系统编码就可以, 只要整个电脑全部用来做开发, 不干其它事情就可以.

至于为了开发让我去更改个人电脑系统编码改成 UTF-8, 那还是算了吧, 我个人的电脑难道仅仅是为了开发吗? 我还要做其它事情呢.

而且就为了个控制台乱码更改系统编码至于吗? 第二种方式不香吗, GBK不香吗?

当然具体怎么选择, 视个人情况而定


附加技巧

如何找出具体乱码原因

想要知道你的乱码为什么乱码成那样, 请先在你的程序里面打印输出 0信1息2信息3,之后看下乱码情况是以下解码后显示的哪一种乱码, 应该就能找到你的乱码是如何乱码成你看到的样子的.

如下第6行, 原信息是0信1息2信息3, 编码格式是UTF-8编码, 但是以 GBK的方式对其进行解码后就变成了0淇�1鎭�2淇℃伅3.

原信息原信息编码格式解码方式解码后显示
0信1息2信息3*ASCII,**UTF_8,*UTF_16, GBK同编码方式一样0信1息2信息3
0信1息2信息3US-ASCIIUS-ASCII,UTF-8,GBK0?1?2??3
0信1息2信息3US-ASCIIUTF-16〿ㄿ㈿㼳
0信1息2信息3UTF-8US-ASCII0���1���2������3
0信1息2信息3UTF-8UTF-16ヤ뾡㇦膯㋤뾡꼳
0信1息2信息3UTF-8GBK0淇�1鎭�2淇℃伅3
0信1息2信息3UTF-16US-ASCII,UTF-8�� 0O� 1o 2O�o 3
0信1息2信息3UTF-16GBK� 0O� 1`o 2O醏o 3
0信1息2信息3GBKUS-ASCII0��1��2����3
0信1息2信息3GBKUTF-80��1Ϣ2��Ϣ3
0信1息2信息3GBKUTF-16バ씱쾢㋐엏ꈳ

上面的表格只是列举了我们绝大多数情况下涉及到的编码 US-ASCII,UTF-8,GBK,UTF-16, 可能你用了之外的其它编码,
另外上面也仅仅是展示了一层转换而已, 可能有以错误编码解码后再次被引用之后再次解码的多次错误转换的情况, 例如UTF编码的信息f以GBK的方式解码后变成了淇℃伅之后再以UTF-8的形式存储后, 再以GBK方式打开, 就变成了娣団剝浼�😀.


如果上面的改完之后还乱码的话, 可以在下面回复我, 或私信@我.

如果想要深入了解乱码原因的话, 就请看下我另一篇文章.

IDEA控制台乱码原理性深入研究分析与解决方案


http://chatgpt.dhexx.cn/article/M0aJsbL3.shtml

相关文章

解决idea控制台乱码

控制台乱码如下&#xff1a; 解决方案一&#xff1a;修改当前 Web 项目 Tomcat Server 的虚拟机输出选项 上方导航栏“Run→Edit Configurations…”进入配置页面&#xff0c;修改当前 Web 项目 Tomcat Server 的虚拟机输出选项 VM options 添加 -Dfile.encodingUTF-8 。重启&…

IDEA控制台乱码(已解决)

先来说说我遇到的问题&#xff0c;用IDEA打开项目首先可以保证编辑器内不会乱码&#xff0c;启动Tomcat后控制台出现乱码   我在网上找了很多方式都没有解决&#xff0c;大多数的方式由以下几种&#xff1a; 进入File->Settings->Editor->File Encodings 将右侧的所…

详细解决tomcat乱码 IDEA控制台乱码

1、启动Tomcat时打印出一大堆看不懂的文字 如下图&#xff1a; 原因&#xff1a;产生乱码的根本原因就是编码和解码不一致 解决办法&#xff1a;将打开tomcat的安装目录conf下的logging.properties文件&#xff0c;将java.util.logging.ConsoleHandler.encoding UTF-8 修改为…

MyBatis、IDEA控制台乱码

控制台乱码&#xff1a; 解决方法 在Maven模块的pom.xml中添加 <properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.buil…

【IDEA乱码解决方案】IDEA控制台乱码解决方案收集

乱码实例 如图&#xff1a; 我的解决方案 在“帮助”——“编辑自定义VM选项”中&#xff0c;最后一行加上代码&#xff1a; -Dfile.encodingUTF-8然后重启IDEA。 其他方案一&#xff1a;修改IDEA安装目录下的idea64.exe.vmoptions IDEA快捷方式右键->属性->打开文件所…

idea控制台乱码问题

1.控制台乱码 控制台tomcat启动信息乱码解决&#xff08;红色字体&#xff09; 1 在本地 tomcat 的配置文件中找到 logging.properties 文件设置日志输出的编码为 UTF-8 追加的配置信息为&#xff1a; java.util.logging.ConsoleHandler.encoding UTF-8 2 在IDEA中配置tomcat的…

解决IDEA控制台中文乱码问题(Tomcat、动态网页项目)

博主在使用idea的创建动态网页的时候&#xff0c;遇到了控制台中文乱码问题&#xff0c;在网上参考了多种解决方案之后&#xff0c;终于将问题成功解决。现在将自己遇到问题的情况和解决问题的方法总结如下&#xff1a; Idea控制台中文乱码问题通常有以下两种情况&#xff08;…

idea控制台中文乱码的解决方法(最后一种亲测有效)

idea控制台中文乱码的解决方法&#xff08;三种&#xff0c;亲测有效&#xff09; 问题情况&#xff1a; IntelliJ IDEA 控制台输出中文乱码部分如图所示&#xff1a; 解决方法&#xff1a; 方法一&#xff1a; 1.打开tomcat配置页面&#xff0c;Edit Configurations。 2…

解决IDEA控制台输出中文乱码问题

解决方法一&#xff1a; 1.打开tomcat配置页面&#xff0c;Edit Configurations。 2.在配置项VM options文本框中输入-Dfile.encodingUTF-8&#xff0c; 添加一条JAVA_TOOL_OPTIONS&#xff0c; 点击Apply&#xff0c;OK即可。 3.尝试重启Tomcat。 解决方法二&#xff1a…

解决 IDEA 控制台中文乱码(三种方法)

1、中文乱码原因 IDEA的下方log输出的部分的编码是GBK的&#xff0c;而Tomcat默认log输出是UTF-8编码的&#xff0c;采用了两种不同的编码方式就是乱码 2、Tomcat乱码解决 2-1&#xff09; 右键打开IDEA文件位置&#xff0c;打开下图选中文件 为其添加下图选中代码 -Dfile.e…

IDEA 控制台乱码 解决方法

IDEA 如果不进行配置的话&#xff0c;运行程序时控制台就会中文乱码&#xff0c;严重影响我们对信息的观察 非常的痛苦&#xff0c;那么上解决方法 一.先把idea关掉然后再他的配置文件中改它的编码信息 每个版本的 idea的配置文件可能会有所不同&#xff0c;但不影响 在后面加上…

IDEA 4种解决控制台中文乱码问题

前言 IntelliJ IDEA 如果不进行配置的话&#xff0c;运行程序时控制台中文乱码问题会非常严重&#xff0c;严重影响我们对信息的获取和程序的跟踪。我总结以下 4 点用于解决控制台中文乱码问题&#xff0c;希望有助于大家。 注意&#xff1a;下面根据我日常工作的经验总结&am…

解决idea控制台乱码问题

一、修改当前 Web 项目 Tomcat Server 的虚拟机输出选项 “Run→Edit Configurations…”进入配置页面&#xff0c;修改当前 Web 项目 Tomcat Server 的虚拟机输出选项 VM options 添加 -Dfile.encodingUTF-8 。在重启之后运行程序检查控制台信息 二、修改 IntelliJ IDEA 全局…

idea控制台乱码解决办法

IDEA 控制台乱码问题 关于这个乱码问题网上的解决方法大同小异, 但是即便你照着网上配置完之后, 也未必能够解决控制台乱码问题. 接下来由我从乱码角度来分析乱码问题, 让大家确保能够解决乱码问题. https://zhuanlan.zhihu.com/p/94412052 我的编码配置原则 源码文件用于项目组…

TCP滑动窗口常见问题

文章目录 参考资料TCP滑动窗口概述引入窗口概念的原因窗口大小由哪一方决定&#xff1f;发送方的滑动窗口接收方的滑动窗口接收窗口和发送窗口的大小是相等的吗&#xff1f;TCP的可靠性&#xff0c;超时重传怎么实现滑动窗口如何实现面向流的可靠性&#xff1f; 参考资料 你还…

TCP滑动窗口协议与流量控制

谈到TCP的滑动窗口协议与流量控制&#xff0c;便会想起当年面试时的场景。那时刚刚毕业&#xff0c;匆匆学了一点TCP的皮毛&#xff0c;仅仅是知道了TCP是面向连接的协议&#xff0c;以对每个报文都进行确认超时重传的机制来保证端到端的可靠传输&#xff1b;并在面试前背了一下…

TCP 滑动窗口简述

窗口机制分为两种&#xff1a; 1.固定的窗口大小 2.滑动窗口 这是指流量控制的窗口机制&#xff1b;数据传输的流量控制&#xff1b; 窗口机制 最基本含义是&#xff1b;理想情况下&#xff0c;数据的传输是快速而有效地进行的&#xff1b;如果发送方计算机在发送每一…

C++模拟TCP滑动窗口传输

此程序是用C进行模拟tcp的“滑动窗口”操作&#xff0c;具体操作如下&#xff1a; 1、首先在提示下发送端输入发送信息和窗口大小 2、调用tcp()函数进行将发送端信息发送给接收端操作 3、具体具体原理如下&#xff1a; 1&#xff09;发送端每次将窗口大小的信息传给接收端 2&am…

TCP滑动窗口、流量控制及拥塞控制详解

一、TCP滑动窗口 TCP虽然是面向字节流的&#xff0c;但是TCP传输的单元确实报文段。一个TCP报文段分为首部和数据部分。TCP首部前20个字节是固定的&#xff0c;后面有4N个字节是可选的。因此&#xff0c;TCP首部最小字节数是20个字节。 下面我们看下一TCP首部中几个重要的字段…

TCP 滑动窗口是个什么东西?这篇讲清楚

今天我们来看TCP的滑动窗口问题&#xff0c;无论是在工作中&#xff0c;还是在笔试面试中&#xff0c;滑动窗口都是非常重要的概念&#xff0c;今天&#xff0c;图文并茂给大家讲清楚&#xff0c;一起来看看。 一、TCP的优势 TCP经过多年厮杀&#xff0c;早已确立了坚实的江湖…