如果您正在Windows上进行自动化,并且正在重定向不同命令的输出(内部cmd.exe或外部),则会发现日志文件包含合并的Unicode和ANSI输出(这意味着它们无效,将无法在查看器/编辑器中加载)。是否可以使cmd.exe与UTF-8一起使用?这个问题不涉及显示,而是关于stdin/stdout/stderr重定向和Unicode。我正在寻找一个解决方案,可以让您执行以下操作:1. 使用UTF-8将内部命令的输出重定向到文件;2. 将支持Unicode的外部命令的输出重定向到文件,但编码为UTF-8。如果使用批处理文件无法获得此类一致性,则还有其他解决此问题的方法吗?比如使用python脚本?在这种情况下,我想知道是否可能仅对Unicode进行检测 (使用脚本的用户不需要记住调用的工具是否会输出Unicode,它只会期望将输出转换为UTF-8)。出于简单起见,我们假设如果工具输出不是Unicode,则将其视为UTF-8(无代码页转换)。
WriteFile()
API返回写入的代码点数,而不是文档中记录的写入的字节数。这个API最终被大多数C库函数(如printf()
)和大多数脚本语言(包括Perl、PHP和Ruby)调用。任何检查写入是否成功的代码,通过比较发送的字节数和返回的字节数将失败。使用返回的数字移动输出光标的代码将导致打印非ASCII文本时出现乱码。 - hippietrailcmd
运行)的输出重定向到文本文件。它一直输出ANSI,因此任何非ASCII字符都是不正确的。我使用了chcp 65001
来更改代码页,然后文本文件包含了正确的Unicode字符。然而,当我创建了一个UTF-8批处理文件,其中只有一个简单的echo ‽
,它在代码页437下显示不正确,在65001下则根本没有显示。将其重定向到文件时,在代码页65001下没有输出,在代码页437下则有正确的输出。ಠ_ఠ - Synetech