[c#] парсинг dbf, проблемы с кодировкой

Happysad

нужно распарсить dbf'ку, заявлено, что в ней DOS-кириллица (cp866 наверное)
открываю через OleDb, но даже вот такая штука не спасает от ненормального отображения кириллицы:
 
 private string Decode(string input)
{
try
{
Encoding fromEncoding = System.Text.Encoding.GetEncoding("cp866");
Encoding toEncoding = System.Text.Encoding.GetEncoding("utf-8"); //
byte[] toEncodeAsBytes = fromEncoding.GetBytes(input);
string returnValue = fromEncoding.GetString(System.Text.Encoding.Convert(fromEncoding, toEncoding, toEncodeAsBytes;
return returnValue;
}
catch
{
return "Ошибка декодирования";
}
}

сам я полный нуб и не знаю, что можно ещё сделать (может предварительная конвертация в другой формат поможет... хз)
*если что, то использую такой драйвер:
 string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DBF\;Extended Properties=dBASE IV;User ID=Admin;Password="; 

Happysad

внезапно открылось через Odbc о_О

zorin29

byte[] toEncodeAsBytes = fromEncoding.GetBytes(input);
Вот тут ошибка.
string - это Unicode-строка. encoding.GetBytes - это конвертация из юникодной строки в последовательность байт в указанной кодировке.
А твоя проблема - что уже строка неправильная: вероятно, она получилась посредством Encoding.UTF8.GetString(cp866EncodedStringAsByteArray).
Тебе, вероятно, надо было вот так сделать, ну просто на будущее.

byte[] sourceBytes = Encoding.UTF8.GetBytes(input); // восстанавливаем исходную последовательность байт.
string returnValue = Encoding.GetEncoding("cp866").GetString(sourceBytes);

Happysad

да, этот косяк я потом тоже нашёл, в итоге через OleDb пустил
Оставить комментарий
Имя или ник:
Комментарий: