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

PowerShell中CSV转Excel时如何保留UTF-8特殊字符?

解决PowerShell导出UTF-8 CSV转Excel时特殊字符乱码问题

你的核心问题在于Excel COM对象的Workbooks.Open方法不会自动识别UTF-8编码,而手动通过「数据→自文本」导入时可以指定编码,只需改用OpenText方法模拟手动导入逻辑即可解决。

修正后的代码

$sqlresults  = Invoke-Sqlcmd -serverinstance $AppServerInstance -Database $databaseName -ApplicationIntent "ReadOnly" -Credential $Cred -InputFile $inputFile -Variable $dateValues -Verbose
$sqlresults | Export-Csv -path $temporaryCsvFile -Encoding UTF8 -noTypeInformation # Export to CSV temporarily

$excelObject = New-Object -comObject Excel.Application
$excelObject.Visible = $false 

# 使用OpenText替代Open,明确指定UTF-8编码和CSV格式规则
$excelObject.Workbooks.OpenText(
    $temporaryCsvFile,
    [Microsoft.Office.Interop.Excel.XlPlatform]::xlWindows,
    1, # 起始行
    [Microsoft.Office.Interop.Excel.XlTextParsingType]::xlDelimited,
    [Microsoft.Office.Interop.Excel.XlTextQualifier]::xlTextQualifierDoubleQuote,
    $false, # 连续分隔符视为一个
    $false, # Tab分隔符
    $false, # 分号分隔符
    $true,  # 逗号分隔符(CSV默认)
    $false, # 空格分隔符
    $false, # 其他分隔符
    65001   # UTF-8编码对应的代码值
)
$workbookObject = $excelObject.ActiveWorkbook

# 可选:保存为正式Excel文件并清理COM对象
$workbookObject.SaveAs("C:\目标路径\最终文件.xlsx", [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbook)
$workbookObject.Close()
$excelObject.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbookObject) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excelObject) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()

关键说明

  1. 编码指定:65001是Excel中UTF-8编码对应的标识值,手动导入时选择的「UTF-8」选项本质就是指定这个编码。
  2. CSV格式匹配:通过参数明确设置逗号为分隔符、双引号为文本限定符,和Export-Csv生成的CSV格式完全对应,避免解析错误。
  3. COM对象清理:必须手动释放Excel相关的COM对象,否则会导致Excel进程在后台残留,占用系统资源。

额外注意

如果使用PowerShell 6及以上版本,导出CSV时建议使用-Encoding UTF8BOM代替UTF8,因为无BOM的UTF-8文件在部分Excel版本中依然可能无法被正确识别;PowerShell 5中的-Encoding UTF8默认会添加BOM,无需额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:00:53