2013-05-16 46 views

回答

2

HtmlDecode用於將Html編碼的字符串轉換爲可讀的字符串格式。也許HtmlEncode可能是你真正想要的。

+2

我認爲OP想要看'''而不是'' – Musa

+0

啊,是的..它說*字符*不是字符。 – pcnThird

+0

雖然''翻譯成''''?項目符號的html表示是'•' - 或者我錯過了什麼? –

5

這裏的問題不是HTML解碼,而是文本被編碼爲一個字符集(例如,windows-1252),然後再次編碼爲第二個(UTF-8)。

在UTF-8中,被解碼爲E2 80 A2。當使用windows-1252編碼讀取這個字節序列時,E2 80 A2編碼爲•。 (再次保存爲UTF-8 •變得C3 A2 E2 82 AC C2 A2 20 54 65 73 74。)

如果該文件是一個窗口1252編碼的文件,該文件可以簡單地與正確的編碼讀取(例如,作爲參數傳遞給一個StreamReader構造函數。) :

new StreamReader(..., Encoding.GetEncoding("windows-1252")); 

如果文件是用不正確的編碼保存的,則編碼在某些情況下可以顛倒。例如,對於你的問題的字符串序列,你可以寫:

string s = "•"; // the string sequence that is not properly encoded 
var b = Encoding.GetEncoding("windows-1252").GetBytes(s); // b = `E2 80 A2` 
string c = Encoding.UTF8.GetString(b); // c = `•` 

注意,很多常見的非打印字符的範圍是U+2000U+2044Reference),如「智能引號」,子彈和破折號。因此,序列â€?(其中?是任何字符)通常將表示這種類型的編碼錯誤。這使得這種類型的錯誤將被更廣泛地糾正:

static string CorrectText(string input) 
{ 
    var winencoding = Encoding.GetEncoding("windows-1252"); 
    return Regex.Replace(input, "â€.", 
     m => Encoding.UTF8.GetString(winencoding.GetBytes(m.Value))); 
} 

調用以這種方式畸形文本此功能將糾正一些(但不是全部)的錯誤。例如CorrectText("•Testâ€「or“")將返回預期的•Test–or「