gpt4 book ai didi

c# - 读取 NpgsqlDataReader 时编码的字节序列无效

转载 作者:行者123 更新时间:2023-11-29 12:55:43 25 4
gpt4 key购买 nike

我正在计算数据读取器的所有行数,为此我正在这样做:

  connection = new NpgsqlConnection(CS);
connection.Open();

command = new NpgsqlCommand(cmd, connection);

dataReader = command.ExecuteReader();

while (dataReader.Read())
{
res++;
}

其中 CS 是我的连接字符串,格式为 Server=server_here;Port=port_here;User Id=username_here;Password=password_here;Database=database_here;。一定数量的记录后,我收到以下消息的异常:

ERROR: 22021: invalid byte sequence for encoding \"UTF8\": 0xbb

我使用的是postgres 9.4,Npgsql版本(从nuget下载)是3.2.2。我的数据库编码是SQL_ASCII,有什么方法可以让我在不改变数据库编码的情况下成功读取完整的数据读取器吗?

最佳答案

默认情况下,Npgsql 会将客户端编码设置为 UTF8,这意味着 PostgreSQL 有责任提供有效的 UTF8 数据,在数据库不是 UTF8 的情况下执行服务器端转换。然而,SQL_ASCII 是特殊的,因为它意味着“我们对超过 127 的字符一无所知”(参见 the PG docs )。所以 PostgreSQL 不对这些执行任何转换。

如果您知道您的数据库采用某种特定的非 UTF8 编码(例如 ISO 8859-1),您可以在连接字符串上传递带有有效名称的 Client Encoding 参数.NET 编码。这将使 Npgsql 正确解释超过 127 个来自 PostgreSQL 的字符。如果您真的不知道您的数据库使用什么编码,那么,您也无能为力...

有关详细信息,请参阅 this issue .

关于c# - 读取 NpgsqlDataReader 时编码的字节序列无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43899024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com