在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存储应该没问题。