命令提示符“树”在控制台中显示 Unicode,但以 ASCII 输出到文件

lag*_*lex 6 windows unicode cmd.exe

在 Windows 10 中cmd.exe,如果我这样做

tree
C:.
????a
?   ????b
?   ????etc...
Run Code Online (Sandbox Code Playgroud)

它清楚地在控制台上正确显示了 Unicode 条形和破折号。

但是如果我将此输出重定向到一个文件

tree > tree.txt
Run Code Online (Sandbox Code Playgroud)

该文件的内容是:

C:.
³ÄÄÄa
³   ÃÄÄÄb
³   ÀÄÄÄetc...
Run Code Online (Sandbox Code Playgroud)

它无法正确写入 Unicode 字符。

它甚至无法回读它所写的内容:

tree > tree.txt
type tree.txt
C:.
????a
?   ????b
?   ????etc...
Run Code Online (Sandbox Code Playgroud)

(它可能在此处显示为“?”(倾斜方块中的问号)但在控制台中它们显示为空框)

我已经尝试过这些建议而没有运气:

尝试chcp 1252chcp 65001从命令行。使用 Lucida Console 或其他字体支持。

CMD /U /c tree > tree.txt
Run Code Online (Sandbox Code Playgroud)

我错误地使用了这个命令,现在已修复,但我仍然得到与刚才相同的结果tree- 它在控制台中显示良好,但文件输出仍然是那些奇怪的字符。

奇怪的是,文本在控制台上显示得很好,但是写入文件会弄乱编码。这里可能是什么问题?

Ben*_*n N 4

通常用于方框图字符的编码是 850,但即使这样对我的 Windows 8.1 系统也没有帮助。我只找到了一种解决cmd文本编码处理不佳的方法:使用能够很好地处理编码的程序,即 PowerShell。

重定向会>破坏字符,因此我们只需吸收tree输出并将其塞入文件中,而不进行简单的cmd重定向:

Invoke-Expression "tree" | Out-File "tree.txt"
Run Code Online (Sandbox Code Playgroud)

或者,更短:

iex "tree" > "tree.txt"
Run Code Online (Sandbox Code Playgroud)

要创建运行该命令然后退出的 PowerShell 实例,请在命令提示符或批处理文件中使用以下命令:

powershell -command "iex \"tree\" > \"tree.txt\""
Run Code Online (Sandbox Code Playgroud)

生成的文件可以在记事本或普通的type.

  • 您可能对我在 stackoverflow 上对同一问题的回答感兴趣:/sf/ask/9700351/ saving-tree-fa-results-to-a-textfile-with-unicode-support/51255816#51255816 - 我改进了同样的技术来生成 UTF8 而不是 UCS2-LE。 (2认同)