簡體   English   中英

UTF-8在SQL Server 2008中的NVarChar中存儲時遇到問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM