如何在cmd.exe上进行正确的Unicode和ANSI输出重定向?

时间:2010-04-24 20:56:02

标签: unicode console ansi cmd io-redirection

如果您在Windows上进行自动化并且您正在重定向不同命令(内部cmd.exe或外部)的输出,您将发现您的日志文件包含组合的Unicode和ANSI输出(意味着它们无效并且在观众/编辑中不会很好地加载。)

是否可以使cmd.exe与UTF-8一起使用?这个问题与显示无关,关于stdin / stdout / stderr重定向和Unicode。

我正在寻找一个可以让你的解决方案:

  • 使用UTF-8
  • 将内部命令的输出重定向到文件
  • 将支持Unicode的外部命令的输出重定向到文件,但编码为UTF-8。

如果使用批处理文件无法获得这种一致性,是否有另一种解决此问题的方法,比如使用python脚本编写?在这种情况下,我想知道是否可以单独进行Unicode检测(使用脚本的用户不应该记住被调用的工具是否会输出Unicode,它只是希望将输出转换为UTF-8。

为简单起见,我们假设如果工具输出不是Unicode,则将其视为UTF-8(无代码页转换)。

2 个答案:

答案 0 :(得分:8)

您可以使用chcp更改活动代码页。这也将用于重定向文本:

chcp 65001

但请记住,如果cmd以强制Unicode(在本例中为UTF-16)重定向输出的/u开关启动,则无效。如果该开关处于活动状态,则无论使用chcp设置的代码页如何,所有输出都将为UTF-16LE。

另请注意,设置为光栅字体时,控制台将无法用于交互式输出。在这种情况下,我收到了有趣的错误消息:

C:\Users\Johannes Rössel\Documents>x
Active code page: 65001

The system cannot write to the specified device.

因此,要么使用合理的设置(控制台的TrueType字体),要么在交互式使用控制台并且路径包含非ASCII字符时不要拉这个特技。

答案 1 :(得分:0)

binmode(STDOUT, ":unix");

use encoding 'utf8';

帮帮我。因此,我在打印警告方面具有广泛的特色。