更改代码页后命令输出不起作用

更改代码页后命令输出不起作用

我在研究字符编码的复杂世界时发现了一个相当奇怪的问题。在 Windows 中,如果我输入“tree”,命令会按预期工作,但如果我随后输入“chcp 65001”(UTF-8),然后再次输入“tree”,命令就会中断。

IE

> tree
> chcp 65001
> tree

在此处输入图片描述

这是在 Windows 7、普通 cmd、西班牙语中。此外,当将输出重定向到文件时,其内容在 chcp 之前和之后是相同的(全是“ÀÄÄÄa”)。

一些研究表明编码是OEM-850。

我知道这看起来像一个多余的问题,但是在编译程序时(主要使用 gcc)我遇到了同样的问题。

在此处输入图片描述

cmd 的开关 /A 和 /U 也无济于事。

在此处输入图片描述

答案1

此非 ASCII 输入问题可在所有 Windows 版本(最高包括 Windows 10)的控制台中重现。控制台主机进程(即conhost.exe)不是为 UTF-8(代码页 65001)设计的,并且尚未更新以一致支持它。

具体来说,非 ASCII 输入会导致空读取,而空读取被视为文件结束,因此控制台对输入的读取会停止,从而导致输出被截断。

/U 开关cmd.exe也没什么用,因为它只适用于内部命令。通过将命令输出定向到文件,您可能会从某些应用程序获得更好的结果,但该文件不会具有 UTF-8 字节顺序标记 (BOM)

简而言之,不要期望太多chcp 65001,你就不会失望。唯一能在 Windows 中良好运行的 Unicode 版本是 16 位 Unicode。

相关内容