Кодировка из cp866 в cp1251
пишу конвертацию из кодировок, но столкнулся с проблемой. В приложении winForms выводит ошибку, что: No data is available for encoding 866. В консольном приложении нормально переводит, с чем это может быть связано?
string commandText = "SELECT * FROM " + Path.GetFileName(dbfFilePath);
using (OleDbCommand command = new OleDbCommand(commandText, connection))
{
using (OleDbDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
byte[] bytes = Encoding.UTF8.GetBytes(reader.GetString(3));
byte[] newBytes = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding(866), bytes);
string newStr = Encoding.GetEncoding(1251).GetString(newBytes);
textBox10.Text = newStr;
}
}
}
Строка подключения:
string connectionStringg = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Path.GetDirectoryName(dbfFilePath) + ";Extended Properties=dBASE IV;charset=866";
Допольнительный код:
string dbfFilePath = "\\\\192.168.0.1\\Centrup\\BAZA\\OSDAL.DBF";
string connectionStringg = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Path.GetDirectoryName(dbfFilePath) + ";Extended Properties=dBASE IV";
using (OleDbConnection connection2 = new OleDbConnection(connectionStringg))
{
connection2.Open();
string commandText = "SELECT * FROM " + Path.GetFileName(dbfFilePath);
using (OleDbCommand command = new OleDbCommand(commandText, connection2))
{
using (OleDbDataReader reader1 = command.ExecuteReader())
{
while (reader1.Read())
{
string tn = removeZero(reader1.GetString(1));
string str = reader1.GetString(3);
DateTime date = reader1.GetDateTime(60);
DateTime date1 = reader1.GetDateTime(12);
byte[] bytes = Encoding.UTF8.GetBytes(str);
byte[] newBytes = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding(866), bytes);
string newStr = Encoding.GetEncoding(1251).GetString(newBytes);
}
}
}
}
Ответы (1 шт):
Автор решения: Anton
→ Ссылка
Проблему решил. Необходимо было прописать:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);