vfpoledb.1驱动程序中使用的编码不正确

时间:2018-05-03 17:55:47

标签: c# oledb visual-foxpro

我正在开发一个需要从/向fox pro dbf free表读/写数据的项目。我之前没有读过或写入数据的问题。当计算机上的代码页设置为与表中使用的代码页不同时,我的问题就出现了。

这些表在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
    }
    

0 个答案:

没有答案