2009-11-06 116 views
0

我在構建ASP.NET自動化的RSS提要,並出現撇號和連字符的渲染很奇怪:ASP.NET特殊字符的問題

「這是一個測試」被渲染爲「Here’ SA試驗」

我已設法通過逸出符號並手動構建HTML逃逸爲£規避以井號(£)一個類似的問題,如下面所述提取物顯示在:

sArticleSummary = sArticleSummary.Replace("£", "£") 

但以下嘗試未能解決撇號問題,我們仍然在屏幕上獲得’

sArticleSummary = sArticleSummary.Replace("’", "’"") 

數據庫(SQL2005)的所有意圖和目的的字符串看起來是純文本 - 任何人都可以提出建議,爲什麼它看上去那樣是純文本字符串一直以這種方式出來,如果任何人有任何想法至於如何解決這個值得讚賞的撇號問題。

感謝您的幫助。

[編輯]

繼弗拉基米爾的幫助下,現在看起來好像問題在於某處數據庫之間,它被加載到字符串VAR的數據從一個撇號轉換爲’ - 誰看見這發生在或有任何指針?

感謝

回答

1

我猜你的SQL 2005數據庫中的列被定義爲varchar(N),char(N)text。如果是這樣,轉換是由於數據庫驅動程序使用與數據庫中設置的代碼頁設置不同的代碼頁設置。

我建議改變這個柱(任何任何其他可能包含非ASCII數據)nvarchar(N)nchar(N)nvarchar(max)分別,然後可以包含任何Unicode碼點,而不僅僅是那些由代碼頁中定義。

我的所有數據庫現在都專門使用nvarchar/nchar來避免這些類型的編碼問題。 Unicode字段使用兩倍的存儲空間,但如果使用此技術(SQL引擎在內部使用Unicode),則性能差異很小。

+0

我們會放棄這一點 - 列確實是varchar。 – Chris 2009-11-06 09:57:27

-1

我只想把「這是一個測試」到CDATA標籤。簡單而有效。

<![CDATA[Here's a test]]> 
+0

感謝 - 只是測試,它必須輸入字符串填充與A€™,而不是單引號,因爲你的例子有硬編碼的效果很好,但一旦變種仍在使用,它呈現爲' – Chris 2009-11-06 09:25:14

0

發現數據(雖然在SQLServer平臺中顯示)實際上攜帶了一些MS Word特殊字符。

+0

您將更好地處理數據,而不是嘗試修補它。如果從Word文檔導入的話,可能會導致大量問題,因此您必須處理所有這些問題。 – devstuff 2009-11-06 09:58:28

+0

謝謝 - 我們一定會在輸入表單中添加一個消毒器 - 單詞C&P一直是這樣或那樣的頭痛。 – Chris 2009-11-06 10:00:57

+0

僅供參考:大多數體面的基於JavaScript的所見即所得的編輯器都有一個「從Word粘貼」功能以去除Word中的內容,因此它們可能適合您的輸入場景(或將算法提升到服務器端)。 – devstuff 2009-11-06 10:15:51

0

假設你從數據庫中得到了Unicode字符,最簡單的方法是讓System.Xml.dll負責爲你添加一個XmlDocument對象的RSS-feed。 (我不確定rss-feed中的元素。)

 XmlDocument rss = new XmlDocument(); 
     rss.LoadXml("<?xml version='1.0'?><rss />"); 
     XmlElement element = rss.DocumentElement.AppendChild(rss.CreateElement("item")) as XmlElement; 
     element.InnerText = sArticleSummary; 

或Linq。XML:

 XDocument rss = new XDocument(
      new XElement("rss", 
       new XElement("item", sArticleSummary) 
      ) 
     );