You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为PowerShell的Select-String设置UTF-16编码?

问题解答

关于Select-String对UTF-16的支持性

PowerShell 5.1及更早版本中,Select-String的-Encoding参数不直接识别utf-16字符串标识,仅支持以下和UTF-16相关的枚举值:

  • Unicode:对应UTF-16LE(小端序UTF-16,也是绝大多数Windows原生程序输出的UTF-16编码格式)
  • BigEndianUnicode:对应UTF-16BE(大端序UTF-16)

PowerShell 7及以上版本已经支持utf-16作为合法的编码参数值,升级版本后原代码可直接运行。

解决方法

方法1:替换编码参数值(最简便)

如果你的exe输出的是常规的UTF-16LE编码内容,直接将编码参数改为Unicode即可:

& "my.exe" | Select-String -Pattern "skipping non-regular file" -NotMatch -Encoding Unicode

如果exe输出的是大端序UTF-16,将编码参数改为BigEndianUnicode即可。

方法2:手动转码处理(兼容性最强)

如果改编码参数后还是出现乱码,可以通过捕获原始字节流手动转码的方式处理,避免PowerShell管道自动转码带来的问题:

# 捕获exe输出的原始字节到临时文件
& "my.exe" | Out-File -FilePath temp_utf16.tmp -Encoding Byte -Raw
# 读取字节并转码为字符串(大端场景替换Unicode为BigEndianUnicode即可)
$rawContent = [System.Text.Encoding]::Unicode.GetString((Get-Content temp_utf16.tmp -Encoding Byte -Raw))
# 执行匹配过滤
$rawContent | Select-String -Pattern "skipping non-regular file" -NotMatch
# 清理临时文件
Remove-Item temp_utf16.tmp -Force

内容的提问来源于stack exchange,提问作者zomega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:24:07