Powershell 推翻了 Perl binmode 吗?

Powershell 推翻了 Perl binmode 吗?

我有一个 Perl 脚本,它在扫描非常大的文本文件时创建一个二进制文件。它输出到 STDOUT,我在命令行中将其重定向到一个文件。

为了优化它,我做了一些更改,然后看看运行所需的时间有多短。在 Linux 上,我使用“time”命令。在 Windows 上,计时程序的最佳方法似乎是使用 PowerShell 的“measure-command”。这似乎很有效,但我注意到生成的文件更大。检查后,我发现从 PowerShell 内部生成的文件以 BOM 开头并包含 CRLF 对!

我的 Perl 脚本有一个“binmode STDOUT”指令,并且在正常的 dosbox 中可以正常工作。

这是 PowerShell 或 measure-command 中的错误或缺陷吗?它是否影响了使用 Perl 以外的其他方式创建二进制文件的人?

到目前为止,谷歌搜索还没有找到任何结果。我使用的是 Perl 5.12、PowerShell v1.0 和 Windows XP。

答案1

这是因为 PowerShell 默认将输出视为字符串。.NET 中的字符串是 Unicode,因此这是 PowerShell 的默认输出。

我假设您正在使用 PowerShell 将输出写入文件?如果是这样,那么使用“Set-Content -Encoding Byte”将解决您的问题。

Measure-Command {& "c:\myscript.pl" | Set-Content "C:\myoutput.bin" -Encoding Byte}

相关内容