在SQL Server 2008中使用NVarChar存储UTF-8有问题

本文关键字:NVarChar 存储 UTF-8 有问题 SQL Server 2008 | 更新日期: 2023-09-27 17:50:31

我正在从一个网站上使用System.Net.WebClient提取数据,当数据返回时,除了带有口音的字母外,所有内容都解析并看起来很好。例如,当返回é时,SQL Server 2008将其保存为é

只需要弄清楚如何将这些UTF-8字符转换成SQL Server可以读取的东西。我将其存储在NVARCHAR(MAX)数据类型中。

如果你好奇的话,我正在使用Linq-to-SQL插入到数据库中。

有什么想法我可以做些什么把它转换成正确的格式?

在SQL Server 2008中使用NVarChar存储UTF-8有问题

明白了!当使用WebClient类时,我将数据作为字符串下载。

My Original Configuration…

System.Net.WebClient wc = new WebClient();
string htmlData = wc.DownloadString(myUri);

我试图将此数据从当前字符串转换为UTF-16…,但由于微软在UTF-16中操作,它已经自己处理转换。

相反,我改变了我的方法,从数据中读取实际的byte[]数组,像这样…

System.Net.WebClient wc = new WebClient();
string htmlData = UTFConvert(wc.DownloadData(myUri));
private string UTFConvert(byte[] utfBytes)
{
    byte[] isoBytes = Encoding.Convert(Encoding.UTF8, Encoding.Unicode, utfBytes);
    return Encoding.Unicode.GetString(isoBytes);
}

这解决了这个问题,SQL现在正确地看到了一切的口音。好啊! .

干杯,谢谢你的帮助!

SQL Server中存储UTF-8数据的说明。在Microsoft SQL Server 2005的国际特性中也有关于这个主题的讨论。其要点是:SQL Server不支持UTF-8。在SQL Server中添加支持本地存储UTF-8的请求,请随时投票。

值得注意的是,由于您通过LINQ存储Unicode字符串,这将指出问题在写入SQL Server之前发生。也就是说,你的网页拉,它是否适当地转换数据读取使用UTF-8阅读器?也就是说,您是否通过使用适当的UTF8Encoding构建的StreamReader读取WebResponse.GetResponseStream() ?应该创建适当的Unicode字符串,然后在DB中的NVARCHAR存储(这是UCS-2)应该是好的。