簡體   English   中英

解碼C#中的特殊字符

[英]Decoding a special character in C#

我想知道我怎么可以在特殊字符解碼•為HTML?

我嘗試過使用System.Web.HttpUtility.HtmlDecode但還沒有運氣。

這里的問題不是HTML解碼,而是文本在一個字符集(例如,windows-1252)中編碼,然后再次編碼為第二個(UTF-8)。

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

如果文件是windows-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+2044參考 )范圍內,例如“智能引號”,項目符號和短划線。 因此,序列â€? 在哪里? 是任何字符,通常表示這種類型的編碼錯誤。 這樣可以更廣泛地糾正此類錯誤:

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“ CorrectText("•Test–or“")將返回預期的•Test–or“ CorrectText("•Test–or“") •Test–or“

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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