我正在测试与字符集编码相关的 Windows 终端 (cmd.exe) 的行为。我有一些带有西班牙文本的几种编码(Win1252、CP437、UTF-8 等)的测试文件:“ qué tal
”
我在我的 Windows 10 机器上打开一个 CMD.exe 终端,使用默认的 CP 437 代码页(我在终端窗口属性中检查)。而且,确实,该type
命令给出了预期的输出:对 CP-437 正确,仅
C:\temp > type testfile-cp437.txt
qué tal (OK)
C:\temp > type testfile-utf8.txt
qué tal (WRONG)
到目前为止一切都很好。
我还安装了 Git for Windows 及其类似 linux 的二进制文件。
现在,我运行它cat.exe
(在同一个终端中,请注意 - 我什至不打开bash.exe
可执行文件),现在结果不同了。似乎一切都适用于 UTF-8
C:\temp > C:\Git\usr\bin\cat.exe testfile-cp437.txt
qu□ tal (WRONG)
C:\temp > C:\Git\usr\bin\cat.exe testfile-utf8.txt
qué tal (OK)
为什么会这样?我希望该cat
命令只是将字节发送到终端,因此结果应该是相同的。字节到 UTF-8 的解码在哪里发生?谁以及为什么选择 UTF-8 编码?这是这个cat
实例的一些实现细节还是什么?