在插入数据库之前转换编码

Convert encoding before inserting into a database

我正在开发一个从平面文件读取数据并将其插入 sql 服务器上的数据库的程序。问题是文件使用代码页 850 编码,而数据库使用代码页 1252。这意味着我必须转换要插入的字符串的编码。

我使用这种方法进行转换:

        private Encoding _sourceEncoding = Encoding.GetEncoding(850);
        private Encoding _destinationEncoding = Encoding.GetEncoding(1252);

        private string AdjustCodePage(string msg)
        {
            byte[] source = _sourceEncoding.GetBytes(msg);
            //byte[] destination = Encoding.Convert(_sourceEncoding, _destinationEncoding, source);
            return _destinationEncoding.GetString(source);
        }

但是这个方法并没有给我预期的结果。当我 select 来自数据库的数据时,所有特殊字符如 'ä'、'ö'、'ü' 都被替换为 '?'

为什么我的转换不起作用?

正如 Jon Skeet 和 Klaus Gütter 在他们的评论中所说,字符串始终是 UTF-16。这意味着 AdjustCodePage 什么都不做,因为字符串本身保持不变。 没有像我想要的那样工作。

为了获得预期的结果,我不得不改变读取文件的方式。所以我从

string[] lines = File.ReadAllLines(filepath);

string[] lines = File.ReadAllLines(filepath, Encoding.GetEncoding(850));

这样转换就发生在系统的边缘,就在创建实际字符串之前。

Jon Skeet 和 Klaus Gütter 致谢!