gpt4 book ai didi

c# - 解码C#中的特殊字符

转载 作者:太空狗 更新时间:2023-10-29 15:46:12 25 4
gpt4 key购买 nike

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

我尝试过使用 System.Web.HttpUtility.HtmlDecode 但还不够好。

最佳答案

这里的问题不是 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+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“

关于c# - 解码C#中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16577519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com