【发布时间】:2018-02-06 18:40:04
【问题描述】:
我正在尝试将(大量 [1])字符串从本机 Windows 主机应用程序 (C++/WinApi) 传递到 PowerShell 脚本,主机应用程序使用 CreateProcess 启动该脚本。
我在STARTUPINFO::hStdInput 中使用匿名管道作为IPC 机制。写入管道的数据由多行 UTF-16LE 字符串 [2] 组成。简单的 PowerShell 脚本打印的内容
foreach ($line in $input) {
write-host $line
}
但是,看起来来自 StdIn 的数据正在被解释为 ANSI 代码页(输入中的每个 UTF 16 代码单元在输出中显示为一对字母)。
如何让 PowerShell 将来自 StdIn 的数据识别为 UTF-16?
我已经尝试过了
- 在管道上的其余数据之前添加 UTF-16 BOM
- 使用 PowerShell 的
$InputEncoding、$OutputEncoding和 .Net 的[Console]::InputEncoding
无济于事。是的,我可以先编写一个大文本文件,然后在 PowerShell 中读取它,但我不想这样做。
[1] 这就是我想使用管道并利用 PowerShell 的流处理功能的原因。
[2] 不能将数据转换为非 Unicode 代码页。
【问题讨论】:
-
这可能会让您找到正确的解决方案。此链接正在处理 UTF8 输入:stackoverflow.com/questions/2902874/…
标签: powershell winapi encoding