文章目录
- 1. 问题描述
- 2. 解决方法
- 3. 系统编码
- 3.1. 代码页简介
- 3.2. 查看代码页
- 3.3. 修改代码页
- 3.4. 国标码关系
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) |
1200 | Unicode |
1201 | Unicode (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) |
65000 | Unicode (UTF-7) |
65001 | Unicode (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 编码方案。
文章目录
- 1. 问题描述
- 2. 解决方法
- 3. 系统编码
- 3.1. 代码页简介
- 3.2. 查看代码页
- 3.3. 修改代码页
- 3.4. 国标码关系
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) |
1200 | Unicode |
1201 | Unicode (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) |
65000 | Unicode (UTF-7) |
65001 | Unicode (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 编码方案。