使用PowerShell的Export-Csv导出SQL Server数据时双引号变为问号
解决PowerShell导出SQL数据到CSV时双引号变为问号的问题
这个问题的核心原因是Export-Csv默认使用ASCII编码,当数据中包含ASCII编码范围外的字符(或特殊格式的引号)时,会被自动替换为问号。以下是几种直接有效的解决办法:
方法1:给Export-Csv指定UTF-8编码
修改原命令,添加-Encoding UTF8参数,确保导出时保留所有Unicode字符(包括双引号):Invoke-Sqlcmd -ServerInstance 'SQLSERVER' -Database "SQL" -Query "select * from Table" | Export-Csv -Path "C:\Users\Desktop\Outquery.csv" -NoTypeInformation -Encoding UTF8方法2:导出无BOM的UTF-8格式(PowerShell 6+适用)
如果你需要兼容非Windows系统的CSV文件,PowerShell 6及以上版本支持utf8NoBOM编码选项:Invoke-Sqlcmd -ServerInstance 'SQLSERVER' -Database "SQL" -Query "select * from Table" | Export-Csv -Path "C:\Users\Desktop\Outquery.csv" -NoTypeInformation -Encoding utf8NoBOM方法3:用ConvertTo-Csv+Out-File替代Export-Csv
如果Export-Csv的编码选项无法满足需求,可以先将数据转为CSV格式字符串,再用Out-File指定编码写入:$sqlData = Invoke-Sqlcmd -ServerInstance 'SQLSERVER' -Database "SQL" -Query "select * from Table" $sqlData | ConvertTo-Csv -NoTypeInformation | Out-File -Path "C:\Users\Desktop\Outquery.csv" -Encoding UTF8
执行上述任意一种方法后,导出的CSV文件中双引号就能正常显示,不会再被替换为问号。
内容的提问来源于stack exchange,提问作者stephenjacob
相关产品推荐
相关产品推荐

