Powershell-写入输出生成具有BOM表字符的字符串

Powershell-写入输出生成具有BOM表字符的字符串,powershell,Powershell,我正在尝试在Powershell脚本中执行这样的命令: 写入输出“一些命令”|一些应用程序 当运行PS script时,某些应用程序接收字符串\xef\xbb\xbfSome命令。第一个字符是UTF-8 BOM。我能在谷歌上找到的所有解决方案,只适用于将输出重定向到文件。但我正在尝试将字符串重定向到另一个命令(通过管道) 变量$OutputEncoding显示已配置ASCII,未设置UTF-8 我正在从Azure DevOps管道运行此脚本,只有在那里才存在此问题。注意:此答案涉及当数据通过管道

我正在尝试在Powershell脚本中执行这样的命令:

写入输出“一些命令”|一些应用程序

当运行PS script
时,某些应用程序
接收字符串
\xef\xbb\xbfSome命令
。第一个字符是UTF-8 BOM。我能在谷歌上找到的所有解决方案,只适用于将输出重定向到文件。但我正在尝试将字符串重定向到另一个命令(通过管道)

变量$OutputEncoding显示已配置ASCII,未设置UTF-8


我正在从Azure DevOps管道运行此脚本,只有在那里才存在此问题。

注意:此答案涉及数据通过管道传输到外部程序时,如何控制PowerShell使用的编码

分开:

  • PowerShell cmdlet在输出时默认使用的字符编码-有关详细信息,请参阅

  • PowerShell在读取从外部程序接收的数据时使用的字符编码-有关更多信息,请参阅


这意味着您错误地将(确定PowerShell用于向外部程序发送数据的字符编码)设置为带有BOM的UTF-8编码

如果您改为指定一种无BOM的UTF-8编码,您的问题就会消失:

$OutputEncoding = [System.Text.Utf8Encoding]::new($false) # BOM-less

"Some Command" | some-application
请注意,在PowerShell[Core]v6+中不会出现此问题,其中
$outpuneCoding
默认为无BOM的UTF-8(不幸的是,在Windows PowerShell中,它默认为ASCII)


为了说明这个问题:

$OutputEncoding = [System.Text.Encoding]::Utf8 # *with* BOM

"Some Command" | findstr .

上述输出<代码>∩╗┐某些命令,其中

是OEM代码页中3字节UTF-8 BOM(
0xef
0xbb
0xbf
)的呈现(例如,在美英系统上)。

注意:此答案涉及如何控制PowerShell在数据通过管道传输到外部程序时使用的编码(由该程序通过stdin读取)

分开:

  • PowerShell cmdlet在输出时默认使用的字符编码-有关详细信息,请参阅

  • PowerShell在读取从外部程序接收的数据时使用的字符编码-有关更多信息,请参阅


这意味着您错误地将(确定PowerShell用于向外部程序发送数据的字符编码)设置为带有BOM的UTF-8编码

如果您改为指定一种无BOM的UTF-8编码,您的问题就会消失:

$OutputEncoding = [System.Text.Utf8Encoding]::new($false) # BOM-less

"Some Command" | some-application
请注意,在PowerShell[Core]v6+中不会出现此问题,其中
$outpuneCoding
默认为无BOM的UTF-8(不幸的是,在Windows PowerShell中,它默认为ASCII)


为了说明这个问题:

$OutputEncoding = [System.Text.Encoding]::Utf8 # *with* BOM

"Some Command" | findstr .

上述输出<代码>∩╗┐某些命令,其中

是OEM代码页中3字节UTF-8 BOM(
0xef
0xbb
0xbf
)的呈现(例如,在美国英语系统上)。

也许可以帮助您?这是否回答了您的问题?也许可以帮助您?这是否回答了您的问题?