在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 之外的任何情况下都会出现乱码。