在 Windows 11 设备上,我将国际设置(运行“intl.cpl”)设置为意大利语,用于非 Unicode 应用程序。现在,这导致 WinMerge 等应用程序猜测代码页1252,从西欧人的角度来看,这看起来不错。写字板也是如此。
但是,我运行的任何终端应用程序(Windows Terminal、cmd.exe、TCC/LE)仍然以 cp 开头850(DOS 多语言拉丁语 I),重音字母有所不同。
此外,我仍然可以CHCP 1252
在每个控制台上这样做,但这不是一种奇怪的行为吗?
编辑:为了增加乐趣,如果我从 cmd.exe 或 TCC/LE 运行bash
重音字母,它看起来是正确的但是当我退出回到上一个命令处理器时,我发现代码页已经切换到 cp 858(无论如何不是有 1252 个重音字母)......
答案1
不,Windows 控制台一直都是这种情况,因为它的根源实际上是 NT 时代之前的“虚拟化 MS-DOS”窗口。
与 GUI 应用程序类似,Windows NT 中的控制台有一组单独的字符型-API,程序可以使用这些API直接输出Unicode文本,而无需进行任何代码页转换。
(或者,在 Windows 10 及更高版本中,启用使用 UTF-8(65001)作为非宽 API 的“ANSI”代码页的选项也会选择 UTF-8 作为“OEM”控制台代码页。)