在插入数据库之前转换编码
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 致谢!
我正在开发一个从平面文件读取数据并将其插入 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 致谢!