C# C语言中特殊字符的解码#
我想知道如何将特殊字符C# C语言中特殊字符的解码#,c#,html,C#,Html,我想知道如何将特殊字符解码为HTML 我尝试过使用System.Web.HttpUtility.HtmlDecode,但还不走运。HtmlDecode用于将Html编码的字符串转换为可读的字符串格式。也许HtmlEncode可能就是您实际寻找的内容。这里的问题不是HTML解码,而是文本被编码在一个字符集(例如,windows-1252)中,然后再次编码为第二个字符集(UTF-8) 在UTF-8中,•被解码为E280 A2。当使用windows-1252编码读取此字节序列时,E280 A2编码为。
解码为HTML
我尝试过使用System.Web.HttpUtility.HtmlDecode
,但还不走运。HtmlDecode用于将Html编码的字符串转换为可读的字符串格式。也许HtmlEncode
可能就是您实际寻找的内容。这里的问题不是HTML解码,而是文本被编码在一个字符集(例如,windows-1252)中,然后再次编码为第二个字符集(UTF-8)
在UTF-8中,•
被解码为E280 A2
。当使用windows-1252编码读取此字节序列时,E280 A2
编码为。(再次保存为UTF-8,
成为C3 A2 E282 AC C2 A2 20 54 65 73 74
)
如果该文件是windows-1252编码的文件,则可以使用正确的编码读取该文件(例如,作为StreamReader构造函数的参数):
如果文件以不正确的编码保存,则在某些情况下可以反转编码。例如,对于问题中的字符串序列,您可以编写:
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”或“Test”)将返回预期的•Test–或“
我想OP希望看到的是•
而不是,
啊,是的。。它说的是字符而不是字符。,
如何翻译成•
?项目符号的html表示是•
,还是我遗漏了什么?
static string CorrectText(string input)
{
var winencoding = Encoding.GetEncoding("windows-1252");
return Regex.Replace(input, "â€.",
m => Encoding.UTF8.GetString(winencoding.GetBytes(m.Value)));
}