【发布时间】:2020-01-12 13:45:41
【问题描述】:
我有带有 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
【问题讨论】:
-
您使用什么工具显示西里尔符号不正确?您是否尝试将编码从 Win1251 更改为更具可读性? Try this answer to change encoding。如果您在将 C# 代码转换为 Powershell 时遇到困难,我可以提供帮助。
-
数据库中的列是否有明确的字符集?如果是这样,您是否尝试将 UTF8 指定为连接字符集?
-
另外,您是否尝试过 Firebird ADO.net 提供程序而不是 ODBC 驱动程序?
-
谢谢,@MarkRotteveel 将字符集更改为 UTF8 有所帮助。那是怎么工作的?请您创建一个答案,我会接受吗?
-
有两种选择:您的数据库有字符集为 NONE 的列,并且数据实际上是 UTF8,而不是 WIN1251,或者结合 Powershell 的 ODBC 驱动程序不处理不同的字符串正确设置字符(我认为 powershell 默认为 utf-8)。
标签: powershell odbc firebird firebird2.5