问题现象: 启动tomcat时,看见日志里有淇℃伅字样的乱码
04-Jun-2020 14:10:58.553 淇℃伅 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:ParallelGCThreads=16
04-Jun-2020 14:10:58.553 淇℃伅 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+HeapDumpOnOutOfMemoryError
04-Jun-2020 14:10:58.553 淇℃伅 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.security.egd=file:/dev/./urandom
04-Jun-2020 14:10:58.554 淇℃伅 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.awt.headless=true
问题分析:百度一搜,解决方案很多。
1,按照网上的方法,修改/tomcat/apache-tomcat-8.0.50/conf/logging.properties,增加黑字部分的一行。
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = GBK
可以正常显示中文
04-Jun-2020 14:10:58.553 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.security.egd=file:/dev/./urandom
04-Jun-2020 14:10:58.554 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.awt.headless=true
2,查看LANG为zh_CN.UTF-8
[root@4cc91c865d88 conf]# echo $LANG
zh_CN.UTF-8
Tomcat默认编码方式也是UTF-8
为什么显示乱码呢?
原来是使用的secureCRT也要指定字符编码。必须指定UTF-8,才能正常识别。之前出错就是因为secureCRT的字符编码选的是GB2312。
问题收获:
1,想要显示中文,就要涉及编码解码,各个环节的编码方式要匹配,否则就会有乱码。
java.util.logging.ConsoleHandler.encoding = GBK指定了tomcat日志默认的编码格式,而secureCRT一开始指定的是GB2312,两种编码格式可以兼容,就可以正常显示中文。
如果不设置java.util.logging.ConsoleHandler.encoding =GBK,tomcat使用操作系统的字符集,因为操作系统是UTF-8,就必须把secureCRT也改为UTF-8。
2,zh_CN.UTF-8,其中zh_CN表示语言环境,设置成zh_CN,tomcat日志输出中文,“信息”两个字就是中文,而设置成en_US,信息两个字就会被INFO代替。
很多软件,也会根据不同的语言环境调整不同的显示。