Проблема с кодировкой с odbc в C# .Net core на linux
Я пишу программу на C# под linux и пытаюсь использовать ODBC для подключения к базе данных. База данных имеет кодировку WIN1251, и при выводе я имею знаки вопросов вместо русских символов.
ОС: Ubuntu
База данных: Interbase
Версия фреймворка: core .net 5.0
Мои попытки решить проблему:
- ODBC драйвер работает нормально, командой из консоли LANG=ru_RU.CP1251 luit isql -v DEVART_INTERBASE (запуск с кодировкой WIN1251, параметры подключения точно такие же) я выполнял обращения к базе данных и все символы нормально отображались.
- Заменял
string login = (string)reader["LOGIN"]на
byte[] buffer = new byte[500];
var byteCount = reader.GetBytes(0, 0, buffer, 0, 500);
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
string login = Encoding.GetEncoding("Windows-1251").GetString(buffer, 0, (int)byteCount);
опять же все символы отображались нормально. Я бы мог использовать этот способ, но при использовании команды INSERT или UPDATE в базе данных русские символы были неправильно записаны, и как решить эту проблему я не знаю.
- Аналогичный код на windows работает без проблем.
Буду рад любым советам.
using System;
using System.Data.Odbc;
namespace net_core {
class Program {
static void Main(string[] args) {
OdbcConnection connection = new OdbcConnection("DRIVER={Devart ODBC Driver for InterBase};Server=10.0.2.2;Database=D:\\InterBase\\gdb\\DATABASE.GDB;Port=3050;User ID=SYSDBA;Password=masterkey;Client Library=/usr/local/lib/libgds.so;Charset=win1251;CharacterSet=win1251;Dialect=3");
connection.Open();
var command = connection.CreateCommand();
command.CommandText="SELECT LOGIN FROM USERS";
OdbcDataReader reader = command.ExecuteReader();
reader.Read();
string login = (string)reader["LOGIN"];
Console.WriteLine(login);
}
}
}