我想知道如何将特殊字符•
解码为HTML?
我已尝试使用System.Web.HttpUtility.HtmlDecode
但尚未运气。
答案 0 :(得分: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
。)
如果文件是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
(Reference)范围内,例如“智能引号”,项目符号和短划线。因此,序列â€?
,其中?
是任何字符,通常表示这种类型的编码错误。这允许更广泛地纠正这种类型的错误:
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“
。
答案 1 :(得分:2)
HtmlDecode用于将Html编码的字符串转换为可读的字符串格式。也许HtmlEncode
可能就是你真正想要的东西。