以前一直使用Eclipse,现在试用IDEA,遇到一些坑,通过网上的答案基本都解决了,但有些答案不好,比如这个问题。
1、原因分析
Tomcat运行Java Web的程序,在IDEA控制台中输出显示,我们一般都是用UTF8编码。
从Java源码到IDEA控制台,大致分为几个阶段:
1)源码:即*.java原文件,是纯文本文件。
编码方式在IDEA的Settings>Editor>File Encodings中设置;
2)编译器:将源码编译成*.class文件。
调用JDK的javac编译器实现,通常可以使用下述命令指定编码:
javac -encoding utf-8 xxxx.java
通常IDE会根据源文件格式设置。编译以后的Java类文件,内部统一用UTF16编码。
3)运行环境:即通过Java运行环境运行编译后的Java程序。
这里涉及的主要是命令行输出,Java程序运行时,会根据输出环境,将内部的UTF16编码转换成响应编码。
写入日志会调用系统标准输出,默认使用的是系统默认编码,中文Windows10一般是GBK(即cp936)。可以通过chcp命令查看。
4)Tomcat日志输出程序,一般调用系统的标准输出。
Tomcat本身的日志输出,通过%TOMCAT_HOME%/conf/logging.properties文件来配置,一般缺省是UTF8。
5)IDEA的控制台输出。
Tomcat日志,会被重定向到IDEA的控制台输出。IDEA的控制台编码,在Settings>Editor>General>Console中设置。一般默认是系统编码,即GBK。
通常日志输出乱码,必然是上述步骤某处的编码不一致。
2、解决办法
就我遇到的问题来说,把IDEA中Settings>Editor>General>Console的编码设为UTF-8即可。