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

如何修正Windows 11中PowerShell ISE与外部命令交互的字符串问题

解决Windows 11 ISE中PowerShell脚本传递字符串给sqlite3.exe的BOM问题

脚本层面的解决方法(优先推荐)

1. 直接通过命令行参数传递sqlite命令

sqlite3支持将命令作为参数直接传入,完全绕开管道编码问题,这是最可靠的方案:

& .\sqlite3.exe db ".show"

2. 输出无BOM的UTF-8字节流传递

如果必须使用管道,手动生成无BOM的UTF-8字节流再传递给sqlite3:

$cmd = ".show"
# 生成无BOM的UTF-8字节,追加换行符确保sqlite识别为完整命令
$byteStream = [System.Text.UTF8Encoding]::new($false).GetBytes($cmd + "`n")
$byteStream | & .\sqlite3.exe db

3. 使用ASCII编码传递(适用于无特殊字符的命令)

如果你的sqlite命令不含非ASCII字符,直接用ASCII编码传递更简洁:

# 转成ASCII字节流传递
$byteStream = [System.Text.ASCIIEncoding]::ASCII.GetBytes(".show`n")
$byteStream | & .\sqlite3.exe db

或者借助Out-String配合sqlite的-ascii参数:

".show" | Out-String -Stream | & .\sqlite3.exe db -ascii

修改ISE全局编码配置(不推荐)

可以修改ISE的默认输出编码为无BOM的UTF-8,不过这会影响所有通过管道传递给原生程序的输出:

  1. 打开ISE,执行$PROFILE找到配置文件路径
  2. 编辑该文件,添加以下代码:
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
  1. 重启ISE生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:53:20