如何使用 PowerShell 的 SqlClient.SqlConnection 以正确的编码从数据库中提取数据?

How to extract data from DB with correct encoding using PowerShell's SqlClient.SqlConnection?

我有以下工作代码:

Function DumpAssets {
    Param(
        [string]$DestinationPath = 'X:\path\to\dump_folder'
    )

    $SQLServer = "SQLSERVER123" 
    $SQLDBName = "SUPER_DB"
    $SqlQuery = "SELECT * FROM Lorem_Ipsum"

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True"

    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = $SqlQuery
    $SqlCmd.Connection = $SqlConnection

    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd

    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet) | Out-Null

    $SqlConnection.Close()

    $DataSet.Tables[0] | Export-Csv "$DestinationPath\dump.csv" -Force -NoTypeInformation
}

DumpAssets

脚本按预期工作,我得到了包含 Lorem_Ipsum table 中所有行的 CSV。问题是我有带重音的数据,它们不会正确显示,而是我得到一堆 ?,例如:SÃO PAULO 变成 S?O PAULO。如果我用 MS SQL Viewer、Power BI 或任何其他可以访问数据库的工具打开 table,它将正确显示。

如何修复我的代码以便正确格式化输出?

您可以在 Export-Csv 中使用参数 -Encoding 指定编码:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/export-csv?view=powershell-5.1 :

$DataSet.Tables[0] | Export-Csv "$DestinationPath\dump.csv" -Encoding UTF8 -Force -NoTypeInformation