Неправильная кодировка, используемая в драйвере vfpoledb.1 - PullRequest
0 голосов
/ 03 мая 2018

Я работаю над проектом, который должен читать / записывать данные из / в бесплатные таблицы fox pro dbf. У меня нет проблем с чтением или записью данных, как я делал это раньше. Моя проблема возникает, когда на компьютере установлена ​​кодовая страница, отличная от кодовой страницы, используемой в таблицах.

Таблицы кодируются в кодовой странице windows-1250, и хотя компьютер, на котором запущен мой exe-сервер, настроен на использование windows-1250, все идет как положено. Как только я запускаю программу на компьютере с другой кодовой страницей, скажем, windows-1252, я получаю странные символы.

Вот мои выводы:

  1. Свойство Codepage можно наблюдать только в команде CPCURRENT(), которая возвращает любое значение, установленное в Codepage, но не влияет на возвращаемое значение.

    Provider=VFPOLEDB.1;Data Source=some\path;Codepage=1250;Collating Sequence=MACHINE;Mode=ReadWrite|Share Deny None;
    
  2. Возвращенные значения не преобразуются, а просто считываются из источника с использованием неправильной кодировки.

    using (var connection = new OleDbConnection(connectionString))
    {
        var encoding1250 = Encoding.GetEncoding(1250);
        var encoding1252 = Encoding.GetEncoding(1252);
        var raw = connection.ExecuteScalar<string>("SELECT column FROM tbl0"); // returns 'éevernka' - incorrect
        var bytes = encoding1252.GetBytes(raw);
        var correct = encoding1250.GetString(bytes); // contains 'červenka' - correct
    }
    
...