如果您在Windows上进行自动化并且您正在重定向不同命令(内部cmd.exe
或外部)的输出,您将发现您的日志文件包含组合的Unicode和ANSI输出(意味着它们无效并且在观众/编辑中不会很好地加载。)
是否可以使cmd.exe与UTF-8一起使用?这个问题与显示无关,关于stdin / stdout / stderr重定向和Unicode。
我正在寻找一个可以让你的解决方案:
如果使用批处理文件无法获得这种一致性,是否有另一种解决此问题的方法,比如使用python脚本编写?在这种情况下,我想知道是否可以单独进行Unicode检测(使用脚本的用户不应该记住被调用的工具是否会输出Unicode,它只是希望将输出转换为UTF-8。
为简单起见,我们假设如果工具输出不是Unicode,则将其视为UTF-8(无代码页转换)。
答案 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';
帮帮我。因此,我在打印警告方面具有广泛的特色。