通过powershell从Firebird数据库读取WIN1251编码的数据

Read data with WIN1251 encoding from Firebird database via powershell

我的数据库中的表格采用 WIN1251 编码。当我从表格中读取数据时,所有西里尔文字的文本都显示为未知符号。这是我使用的代码:

function Get-ODBC-Data {
    param([string]$query = $(throw 'query is required.'))
    $conn = New-Object System.Data.Odbc.OdbcConnection
    $connStr = "Driver=Firebird/Interbase(r) driver;Server=localhost;Port=3050;Database=C:\Users\user\Desktop\B52.GDB;Uid=SYSDBA;Pwd=masterkey;CHARSET=WIN1251"
    $conn.ConnectionString = $connStr
    $conn.open
    $cmd = new-object System.Data.Odbc.OdbcCommand($query, $conn)
    $cmd.CommandTimeout = 15
    $ds = New-Object system.Data.DataSet
    $da = New-Object system.Data.odbc.odbcDataAdapter($cmd)
    [void]$da.fill($ds)
    $ds.Tables[0] 
    $conn.close()
}

$query = @"
    SELECT name FROM contact;
"@

$result = Get-ODBC-Data -query $query
$customers = @();
foreach ($row in $result) {
    if (-not($null -eq $row.name)) {
        $customers += $row.name;
    }
}

$customers

您可以尝试将连接字符集指定为UTF8而不是WIN1251。

只有当您的数据库确实包含 WIN1251 中的数据并且这些列将 WIN1251 作为其显式字符集时,这才会起作用,如果这些列具有字符集 NONE(或 NULL),那么这仅当数据实际为 UTF8 格式时才有效。

问题是您的数据不符合您的预期(即不是 WIN1251),或者 Powershell 和 Firebird ODBC 驱动程序的组合无法处理与控制台不同字符集中的字符串字符设置正确(如果我没记错的话,Powershell 字符集是 utf-8)。