在Windows 7下cmd.exe为什么utf8(65001)和gbk(936)都能正确显示中文文件名?

在Windows 7下cmd.exe为什么utf8(65001)和gbk(936)都能正确显示中文文件名?

在Win7 cmd.exe下,运行以下命令会重现我今天遇到的情况:

(需要澄清的是,我的 D:分区格式化为 NTFS。)

D:\...\_play\notes> chcp
Active code page: 65001

D:\...\_play\notes>dir /b
输入.txt
输出.txt

D:\...\_play\notes> chcp 936
活动代码页: 936                 (the chinese version of "Active Code Page: 936")

D:\...\_play\notes>dir /b
输入.txt
输出.txt

这就是命令的行为dir,和命令相比type,它看起来更加令人困惑。

D:\...\_play\notes>chcp
活动代码页: 936                 (the chinese version of "Active Code Page: 936")

D:\...\_play\notes>type 输入.txt
====== 璺ㄧ晫鍙傝€冭祫婧愪俊鎭緭鍏ュ獟浠?=====   (text garbled as the file is encoded in utf8)

D:\...\_play\notes> chcp 65001
Active code page: 65001

D:\...\_play\notes>type 输入.txt
====== 跨界参考资源信息输入媒介 ======

答案1

文件名在 NTFS 和 VFAT 中以 UTF-16LE 格式存储,文件函数知道如何将其转换为当前 CP(如果可能)。文件内容以字节形式读取,因此在除其适当 CP 之外的任何情况下都会出现乱码。

相关内容