【发布时间】:2021-03-23 09:57:02
【问题描述】:
我正在开发一个程序,该程序从平面文件中读取数据并将其插入到 sql server 上的数据库中。问题是文件使用代码页 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);
}
但是这种方法并没有给我预期的结果。当我从数据库中选择数据时,所有特殊字符(如“ä”、“ö”、“ü”)都被替换为“?”
为什么我的转换不起作用?
【问题讨论】:
-
A
string始终是 UTF-16。您在此处应用的转换没有任何意义 - 如果您确保使用正确的编码从平面文件中读取字符串,那么字符串中应该包含正确的数据,并且您不需要这样做别的什么。 -
string始终是 Unicode,您必须在系统边缘进行解码/编码,即在从文件中读取字符串时应用解码并让 ADO.NET(或任何您用于数据库访问)处理数据库编码。 -
感谢@JonSkeet 帮助了我。它现在正在工作!
-
@Tomsen SQL Server 如果您将文本保存在
nvarchar列中也不会出现编码问题。您确实需要什么都不做 以在单个字段中包含中文、德文和西里尔文文本。 StackOverflow 证明了这一点 - 一个 .NET 应用程序在nvarchar字段中保存文本。这就是为什么我可以写Αυτό εδώ和ä,ö,ü并希望评论出现没有问题。
标签: c# .net sql-server encoding