解码C#中的特殊字符

时间:2013-05-16 01:16:23

标签: c# html

我想知道如何将特殊字符•解码为HTML?

我已尝试使用System.Web.HttpUtility.HtmlDecode但尚未运气。

2 个答案:

答案 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+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“

答案 1 :(得分:2)

HtmlDecode用于将Html编码的字符串转换为可读的字符串格式。也许HtmlEncode可能就是你真正想要的东西。