[英]Having trouble with UTF-8 storing in NVarChar in SQL Server 2008
我正在從網站上使用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現在可以正確地看到所有內容中的重點。 是的
祝一切順利,並感謝您的幫助!
在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字符串,然后數據庫中的NVARCHAR存儲(UCS-2)應該可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.