我有一个启用了亚洲语言支持的英文版Windows 2003服务器。命令窗口可用的两种唯一字体(cmd设置)是raster和lucida console。这两者都没有正确显示汉字(显示为问号)。
是否有解决方案让它们显示出来? 在写入控制台之前,我的应用程序中是否必须进行一些转换?
我现在正在写UTF8,对于一些非ASCII字符(如öäüß)也有效。写入控制台的源代码具有正确的数据(可以在调试器中正确查看汉字)。如果重要,我正在用C#编写应用程序。
编辑: 我发现这个link解释了问题背后的问题,并提出了C#的解决方案(涉及本机调用)。这适用于.NET 4.5(我未经测试)
答案 0 :(得分:5)
如果找到显示汉字字符集的字体,可以通过在此注册表项下添加值将该字体添加到cmd设置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont\
值:
Name: 00
Data: Consolas
我以前做过这个,但在SuperUser上找到了这个参考:https://superuser.com/q/55318
希望这有帮助
答案 1 :(得分:3)
您的应用程序如何编写输出?像printf
这样的基于C字节的stdio调用在Windows上不支持UTF-8,除非您通过说chcp 65001 && somecommand
专门设置控制台使用UTF-8编码(即使那时存在问题)
如果没有chcp
,控制台将使用Windows安装的默认代码页,在本例中为cp1252,即使您使用的控制台字体具有字形,也无法使用汉字书写。
如果要可靠地将Unicode写入控制台,则必须使用基于字符的接口,如wprintf
。
答案 2 :(得分:3)
这是我在Windows 7 Pro英文版上运行的cmd.exe中输入/输出的方法。
安装console2,,它是cmd.exe(和其他shell)的前端。
安装完成后,请按照here
说明操作将以下数据导入Windows注册表:
中文(中文)Windows XP& Vista中:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\Console2 command window]
"CodePage"=dword:000003a8
"FontSize"=dword:000a0000
"FontFamily"=dword:00000036
"FontWeight"=dword:00000190
"FaceName"="細明體"
"HistoryNoDup"=dword:00000000
日语(日本语)Windows XP& Vista中:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\Console2 command window]
"CodePage"=dword:000003a8
"FontSize"=dword:000a0000
"FontFamily"=dword:00000036
"FontWeight"=dword:00000190
"FaceName"="MS 明朝"
"HistoryNoDup"=dword:00000000
您可能需要也可能不需要更改字体。最初我将字体设置为@NimSum,中文字符旋转90度。然后我切换到NimSum(没有@),它正确地出来了。然后出于好奇我转到了Consola,但我还能看到汉字。所以不确定你是否真的必须设置字体。
答案 3 :(得分:0)
Consolas(即使在Windows 10上也是如此)在控制台中无法正确显示日语字符;我检查了“字符映射表”中的字体,它根本没有任何东南亚语言的字形。您需要将控制台字体设置为MS Mincho
或类似的亚洲支持字体来显示日语字符。这还将把反斜杠更改为日元符号,这在日本系统中是标准的事情。您不需要更改代码页或语言环境设置,但至少需要安装日语支持才能安装日语字体。在Windows Server 2003和Windows XP之类的NT5系统上,其区域和语言选项中都有一个复选框。在NT6(Vista及更高版本)上,您只需添加日语IME,它就会安装所需的文件。