Tomcat 在 Windows 本地启动日志中文乱码问题


1. 问题描述

(1)在 Windows7 系统上安装了一个 Tomcat,直接通过 startup.bat 启动的时候日志出现了乱码。
(2)将该 Tomcat 配置到 IDEA 中后,在 IDEA 中启动,Tomcat 启动日志乱码,但是项目日志无乱码。这种问题一般是编码不一致导致的。
在这里插入图片描述

2. 解决方法

在 Tomcat 的安装目录下的 conf 目录下,找到 logging.properties 文件,修改日志配置为 GBK。

我的目录为D:\Program Files (x86)\apache-tomcat-8.5.56\conf
修改内容为java.util.logging.ConsoleHandler.encoding = GBK
在这里插入图片描述
这样命令行显示的中文日志就不是乱码了。但是在 IDEA 中, Tomcat 启动日志显示不乱码了,项目日志却显示乱码了。所以这种方式还需改进。

所以我们试着直接把java.util.logging.ConsoleHandler.encoding = UTF-8这行注释掉,不去指定固定的编码(不加 GBK 的那行了)。这样所有地方的乱码就都解决了。推测应该是不指定编码的话 Tomcat 会自动跟随当前运行环境的编码。
在这里插入图片描述

3. 系统编码

在解决问题的过程中涉及到到的一些其他知识记录一下。

3.1. 代码页简介

代码页是字符集编码的别名,也有人称"内码表"。早期,代码页是 IBM 称呼电脑 BIOS 本身支持的字符集编码的名称。当时通用的操作系统都是命令行界面系统,这些操作系统直接使用 BIOS 提供的 VGA 功能来显示字符,操作系统的编码支持也就依靠 BIOS 的编码。现在 BIOS 代码页被称为 OEM 代码页。图形操作系统解决了此问题,图形操作系统使用自己的字符呈现引擎可以支持很多不同的字符集编码。

早期 IBM 和微软内部使用特别数字来标记这些编码,其实这些编码大多数已经有自己的名称了。虽然图形操作系统可以支持很多编码,但是很多微软程序依然使用这些数字来指定某编码。

下表列出了所有支持的代码页及其国家(地区)或者语言:

代码页国家(地区)或语言
437美国
708阿拉伯文(ASMO 708)
720阿拉伯文(DOS)
850多语言(拉丁文 I)
852中欧(DOS) - 斯拉夫语(拉丁文 II)
855西里尔文(俄语)
857土耳其语
860葡萄牙语
861冰岛语
862希伯来文(DOS)
863加拿大 - 法语
865日耳曼语
866俄语 - 西里尔文(DOS)
869现代希腊语
874泰文(Windows)
932日文(Shift-JIS)
936中国 - 简体中文(GB2312)
949韩文
950繁体中文(Big5)
1200Unicode
1201Unicode (Big-Endian)
1250中欧(Windows)
1251西里尔文(Windows)
1252西欧(Windows)
1253希腊文(Windows)
1254土耳其文(Windows)
1255希伯来文(Windows)
1256阿拉伯文(Windows)
1257波罗的海文(Windows)
1258越南文(Windows)
20866西里尔文(KOI8-R)
21866西里尔文(KOI8-U)
28592中欧(ISO)
28593拉丁文 3 (ISO)
28594波罗的海文(ISO)
28595西里尔文(ISO)
28596阿拉伯文(ISO)
28597希腊文(ISO)
28598希伯来文(ISO-Visual)
38598希伯来文(ISO-Logical)
50000用户定义的
50001自动选择
50220日文(JIS)
50221日文(JIS-允许一个字节的片假名)
50222日文(JIS-允许一个字节的片假名 - SO/SI)
50225韩文(ISO)
50932日文(自动选择)
50949韩文(自动选择)
51932日文(EUC)
51949韩文(EUC)
52936简体中文(HZ)
65000Unicode (UTF-7)
65001Unicode (UTF-8)

3.2. 查看代码页

使用 CMD 打开命令行窗口,输入chcp,可查看 Windows 系统编码。
在这里插入图片描述
可以看到活动代码页:936,它对应的编码格式为中文编码 GBK。
也可以直接在命令行标题栏上点击右键,选择属性,可以看到对应代码页。
在这里插入图片描述

3.3. 修改代码页

(1)修改前窗口默认属性。
在这里插入图片描述
在这里插入图片描述
(2)通过chcp 65001将命令行窗口的编码修改为 UTF-8。
在这里插入图片描述
(3)在命令行标题栏上点击右键,选择属性,将字体修改为 Lucida Console,然后点击确定将属性应用到当前窗口。
在这里插入图片描述
这样下次进来的命令行窗口就会是 UTF-8 编码了。

3.4. 国标码关系

国标码是汉字的国家标准编码,目前主要有 GB2312、GBK、GB18030 三种。
(1)GB2312 编码方案于 1980 年发布,收录汉字 6763 个,采用双字节编码。
(2)GBK 编码方案于 1995 年发布,收录汉字 21003 个,采用双字节编码。
(3)GB18030 编码方案于 2000 年发布第一版,收录汉字 27533个;2005 年发布第二版,收录汉字 70000 余个,以及多种少数民族文字。GB18030 采用单字节、双字节、四字节分段编码。

新版向下兼容旧版,也就是说 GBK 是在 GB2312 已有码位基础上增加新码位,GB18030 是在 GBK 已有码位基础上增加新码位,各种编码方案中共有的字符编码相同。现在的中文信息处理应优先采用 GB18030 编码方案。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值