解码C#中的特殊字符

use*_*013 5 html c#

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

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

drf*_*drf 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"));
Run Code Online (Sandbox Code Playgroud)

如果使用不正确的编码保存文件,则在某些情况下可以反转编码.例如,对于问题中的字符串序列,您可以编写:

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 = `•`
Run Code Online (Sandbox Code Playgroud)

请注意,许多常见的非打印字符的范围是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)));
}
Run Code Online (Sandbox Code Playgroud)

使用以这种方式格式错误的文本调用此函数将纠正一些(但不是全部)错误.例如,CorrectText("•Test–or“")将返回预期的•Test–or“.


Tom*_*m F 2

HtmlDecode 用于将 Html 编码的字符串转换为可读的字符串格式。也许HtmlEncode这就是您真正在寻找的东西。

  • 我认为 OP 希望看到“•”而不是“…” (2认同)