2012-07-29 65 views
3

我正在從web服務讀取數據,它返回html友好的ascii代碼而不是文本。我試圖將它轉換爲一個WinRT應用程序的字符串,但我似乎無法找到正確的解碼器。如何將html友好的ascii代碼轉換爲c#中的字符串?

例如:

'應等於一個撇號。

我已經嘗試過htmldecode和urldecode,但它們不是我所需要的。此外,我不知道我會回來,所以我不想硬編碼任何字符。

感謝您的幫助!

+0

你只能得到數字實體,或者你還可以得到命名實體(例如''',' ',''—等)?如果您不熟悉HTML實體,請點擊此處瞭解更多信息:http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML – 2012-07-29 15:52:47

+0

「他們不是我需要的」意思是什麼?預期產出是多少?實際得到的產出是多少? – 2012-07-29 15:57:22

+0

「他們不是我需要的」意味着他們不工作。它們僅轉換諸如<和&lgt;類型數據。但不是ascii代碼。他們只是返回完全相同的東西。 @JoeWhite我也得到命名實體。我可能不得不手動處理這些,我不確定。 我將發佈我對數字實體有效的代碼。 – Smeegs 2012-07-29 16:04:31

回答

12

參考的System.Web和使用:

HttpUtility.HtmlDecode("htmlcode"); 
+0

是這樣做的。傳入的數據實際上被編碼了兩次,我不得不運行兩次htmldecode。 – Smeegs 2012-07-29 16:15:09

0

如果你說HttpUtility.HtmlDecode()沒有給你你需要的東西,你可能需要編寫一個正則表達式或其他比較來遍歷你的字符串,匹配the HTML Codes table中的HTML編號或HTML名稱列的值,這樣你就可以將其轉換爲相應的符號。

+0

感謝您的幫助。不花費更多時間檢查輸入數據是我的錯。它被編碼了兩次,所以我不得不解碼兩次。 – Smeegs 2012-07-29 16:18:08

1

好了,我這有一些代碼來處理數字實體。

Regex r = new Regex("&#[^;]+;"); 
str = r.Replace(str, delegate(Match match) 
{ 
    string value = match.Value.ToString().Replace("&#", "").Replace(";", ""); 
    int asciiCode; 
    if (int.TryParse(value, out asciiCode)) 
    { 
     return Convert.ToChar(asciiCode).ToString(); 
    } 
    else 
    { 
     return value; 
    }     
}); 
相關問題