如何在PowerShell中读取UTF-16编码的StdIn

问题描述 投票:1回答:1

我正在尝试将(大量[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代码页。

我正在尝试将(大量[1])字符串从本机Windows主机应用程序(C ++ / WinApi)传递到PowerShell脚本,该脚本由主机应用程序使用CreateProcess启动。我使用...

powershell winapi encoding
1个回答
0
投票

最终要解决这个老问题:正确设置.Net控制台输入编码(这是Powershell所基于的编码)是一个非常重要的问题。我终于解决了这个问题,因为我不想让Powershell-script开发人员负担输入编码设置。所以我结束了

© www.soinside.com 2019 - 2024. All rights reserved.