当我在cmd.exe
窗口中运行命令chcp
时,它表示Windows中使用的代码页。为什么Windows使用ANSI代码页而不是UNICODE?
我认为Windows使用UNICODE字符集。
所以,我的问题是:
为什么Windows使用ANSI代码页而不是Unicode的?
Windows使用UTF-16或UCS-2?我可以检查这个(通过命令或MSDN链接)?
UTF-16或UCS-2只是一种编码?或者也是一个字符集?
UTF-8,UTF-16,UTF-32等。他们有不同的字符集大小吗?
我很困惑。请有人定义它们。
更改控制台的代码页仅影响非Unicode应用程序。 AFAIK控制台仍然只支持UCS-2,但是当然大多数Windows应用程序都是GUI,不管怎样都不使用控制台。 –
控制台中的字符单元使用16位字符代码。这限制了它可以向BMP显示的内容。一个UTF-16代理对可以写入相邻的单元格,在这种情况下,它们将显示为两个默认字形,例如盒装问号。 FWIW,您可以将代理对复制并粘贴到另一个窗口。该控制台也不使用Uniscribe或DirectWrite,因此不支持复杂脚本,组合字符和自动回退字体。您可以通过注册表中的手动字体链接来改善字形覆盖率。 – eryksun
* 1)为什么Windows使用ANSI代码页代替UNICODE?*真正的控制台使用Unicode和多字节api。所有内部函数都使用Unicode。文本显示为Unicode。 CP仅用于翻译输入/输出Unicode <->多字节。如果我们调用'WriteConsoleW'文本将按原样显示并且当前CP不起作用。如果我们调用'WriteConsoleA',文本将首先通过'MultiByteToWideChar'转换为Unicode,CP将作为第一个参数使用。所以'a' api调用结果取决于当前的CP,而'W'没有。和'chcp'只对目前的'cmd.exe'有效。 – RbMm