为什么 Windows DIR 命令会产生 ??? 字符而不是俄文字母?

为什么 Windows DIR 命令会产生 ??? 字符而不是俄文字母?

在 Windows 10 机器上,通过命令行,我运行以下命令:
C:\Users\idiot\Music>dir /a:d /s /b >> tom-music-2016-july.txt

目的是列出所有目录。但我注意到名称中含有非罗马字母的目录会打印 ????? 而不是俄文或中文字符。为什么?

最初我以为问题出在系统字体上。(我没有安装俄语语言包)。但我可以在 Win Explorer 中将文件重命名为俄语文件名。重要的是,当我在窗口中运行 DIR 命令(而不将其传输到输出文件)时,我可以清晰地看到俄文字符

对我来说,这意味着问题要么出在将某些内容传输到文件的命令上,要么出在试图读取输出的 Windows 文本编辑器上。

我尝试在两个独立的文本编辑器甚至网络浏览器中打开该文件,但无论如何我都会看到问号字符。

有人能提出这个问题的原因和可能的解决方案吗?

我是否正确地假设我不需要对文件或目录本身进行任何处理?谢谢。

后记:我特别困惑为什么俄语字符在控制台窗口中显示正常,但当它被传输到文件时,我却看到问号。

答案1

没什么秘密:使用重定向创建的文件的编码>遵循当前活动的代码页cmd?如果某个字符在这样的代码页中不存在,则 (问号) 只是一个替代 (替换标记)。

解决方案:使用UTF-8(代码页 65001)作为chcp 65001

下面的例子说明了(或许可以证明)相当好:

d:\bat\UnASCII Names> chcp 1250
Active code page: 1250

d:\bat\UnASCII Names> dir /b /AD >dir1250.txt

d:\bat\UnASCII Names> chcp 65001
Active code page: 65001

d:\bat\UnASCII Names> dir /b /AD >dir65001.txt

在 Notepad++ 中打开的dir1250.txt文件:dir65001.txt

重定向和编码

请注意所谓的ANSI在我的语言环境中是代码页 1250 (中欧),而您的语言环境中可能是代码页 1252 (美国和西欧)…

相关内容