我正在计算数据阅读器中的所有行,因为我正在这样做:
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;
。在一定数量的记录之后,我收到以下消息的异常:
错误:22021:编码的无效字节序列\" UTF8 \":0xbb
我正在使用postgres 9.4,而Npgsql版本(从nuget下载)是3.2.2。我的数据库编码是SQL_ASCII
,有没有办法让我在不改变数据库编码的情况下成功读取完整的数据读取器?
答案 0 :(得分:2)
默认情况下,Npgsql会将客户端编码设置为UTF8,这意味着PostgreSQL负责提供有效的UTF8数据,在数据库不是UTF8的情况下执行服务器端转换。但是,SQL_ASCII是特殊的,因为它意味着"我们对127"以外的字符一无所知。 (见the PG docs)。所以PostgreSQL不对它们进行转换。
如果您知道您的数据库采用某种特定的非UTF8编码(例如,ISO 8859-1),则可以使用有效.NET编码的名称在连接字符串上传递Client Encoding
参数。这将使Npgsql正确解释来自PostgreSQL的超过127的字符。如果您真的不知道数据库使用的编码,那么,您无能为力......
有关详细信息,请参阅this issue。
答案 1 :(得分:0)