cmd.exe使用的默认编码是Cp850(或者操作系统本机的“OEM”CP);系统编码是Cp1252(或任何“ANSI”CP是OS本机的).
Gory details here.发现控制台编码的一种方法是执行
via native code(有关当前控制台编码,请参阅
GetConsoleOutputCP;有关默认“ANSI”编码,请参阅
GetACP;
etc.).
通过-D开关更改编码将影响所有默认编码机制,包括重定向的stdout / stdin / stderr.这不是一个理想的解决方案.
我想出了这个可以将控制台设置为系统ANSI代码页的WSH脚本,但是还没弄清楚如何以编程方式切换到TrueType字体.
'file: setacp.vbs
'usage: cscript /Nologo setacp.vbs
Set objShell = CreateObject("WScript.Shell")
'replace ACP (ANSI) with OEMCP for default console CP
cp = objShell.RegRead("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001" &_
"\Control\Nls\CodePage\ACP")
WScript.Echo "Switching console code page to " & cp
objShell.Exec "chcp.com " & cp
(这是我的第一个WSH脚本,因此它可能存在缺陷 – 我不熟悉注册表读取权限.)
使用TrueType字体是使用ANSI / Unicode和cmd.exe的另一个要求.在时间允许的情况下,我将看一个程序切换到更好的字体.