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