在SQL Server 2008中的NVarChar中存储UTF-8时遇到问题

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

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

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

有什么想法,我可以做到将其转换为正确的格式?

弄清楚了! 使用WebClient类时,我将数据下载为字符串。

我的原始配置……

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

我尝试将此数据转换为UTF-16 …来自它的当前字符串,但由于Microsoft以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正确地看到了现在所有内容的重音。 YIPPEE。

干杯,谢谢你的帮助!

在SQL Server中存储UTF-8数据的说明 。 Microsoft SQL Server 2005中的国际function也讨论了此主题。 它的要点是:SQL Server不支持UTF-8。 随意请求添加支持在SQL Server中本地存储UTF-8的请求。

但请注意,由于您通过LINQ存储Unicode字符串,这表明写入SQL Server 之前会出现问题。 即你的网络拉,是否适当地转换使用UTF-8读卡器读取的数据? 也就是说,您是否通过使用适当的UTF8Encoding构造的StreamReader读取WebResponse.GetResponseStream() ? 这应该创建正确的Unicode字符串,然后DB(UCS-2)中的NVARCHAR存储应该没问题。