在 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 (美国和西欧)…