最近在学 Lua 的过程中发现一个问题,cmd 执行 Lua 程序打印中文会变成乱码。
原因是 控制台 默认使用 GBK 编码。要修改 控制台 的编码就要用到 CHCP 命令了。
有两种方式查看 chcp 的用法说明
help chcp
chcp /?
CHCP [nnn]
nnn 指定代码页的编号(注意:三个n并非说明代码页只能有3位)
CHCP 命令用来显示或设置 控制台 的 活动代码页编号。不带参数键入 CHCP 以显示活动代码页编号。
活动代码页编号的定义
代码页是字符集编码的别名,也有人称”内码表”。早期,代码页是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) |
将 控制台 编码 临时 设为 utf-8 编码
控制台 的默认编码为:936【中国 - 简体中文(GB2312)】
键入 chcp 65001
控制台就会清屏,然后切换到新的代码页
但是如果仅这样设置的话,下次打开控制台还会恢复成原来的编码,即 936【中国 - 简体中文(GB2312)】。
将 控制台 编码 永久 设为 utf-8 编码
只有一种办法,那就是修改注册表
运行 regedit
进入
HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe
将 CodePage 改为 fde9 (原值为 3a8)均是编码的十六进制表现形式。
powershell 的默认编码也可以通过这种方式改变。
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
</div>