2013-05-16 54 views

回答

2

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

+2

我认为OP想要看'''而不是'' – Musa

+0

啊,是的..它说*字符*不是字符。 – pcnThird

+0

虽然''翻译成''''?项目符号的html表示是'•' - 或者我错过了什么? –

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。)

如果该文件是一个窗口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“