[英]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+2000
到U+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.