如何修正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,不过这会影响所有通过管道传递给原生程序的输出:
- 打开ISE,执行
$PROFILE找到配置文件路径 - 编辑该文件,添加以下代码:
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
- 重启ISE生效
内容的提问来源于stack exchange,提问作者saviourofdp
相关产品推荐
相关产品推荐

