gpt4 book ai didi

c# - 如何从剪贴板中获取正确编码的 HTML?

转载 作者:太空狗 更新时间:2023-10-29 21:48:17 24 4
gpt4 key购买 nike

有没有人注意到如果您从剪贴板中检索 HTML,它会得到错误的编码并注入(inject)奇怪的字符?

例如,执行这样的命令:

string s = (string) Clipboard.GetData(DataFormats.Html)

结果如下:

<FONT size=-2>  <A href="/advanced_search?hl=en">Advanced 
Search</A><BR>  <A href="/preferences?hl=en">Preferences</A><BR>  <A
href="/language_tools?hl=en">Language
Tools</A></FONT>

不确定 MarkDown 将如何处理它,但上面生成的标记中有奇怪的字符。

看来该错误与 .NET 框架有关。您认为从剪贴板中获取正确编码的 HTML 的最佳方式是什么?

最佳答案

在这种情况下,它不像在我的情况下那么明显。今天我试图从剪贴板复制数据,但有一些 unicode 字符。我得到的数据就好像我会读取 Windows-1250 编码的 UTF-8 编码文件(我的 Windows 中的本地编码)

看来你的情况是一样的。如果您在 Windows-1252 (或 Windows-1250;两者都有效)中保存 html 数据(记住在 Â 字符后放置不可破坏的空格 = 0xa0,而不是标准空格)/em>。然后将此文件作为 UTF-8 文件打开,您将看到应该有什么。

对于我的其他项目,我制作了一个函数来修复编码损坏的数据。

在这种情况下,简单的转换就足够了:

byte[] data = Encoding.Default.GetBytes(text);
text = Encoding.UTF8.GetString(data);

我的原始功能稍微复杂一些,包含确保数据未损坏的测试...

public static bool FixMisencodedUTF8(ref string text, Encoding encoding)
{
if (string.IsNullOrEmpty(text))
return false;
byte[] data = encoding.GetBytes(text);
// there should not be any character outside source encoding
string newStr = encoding.GetString(data);
if (!string.Equals(text, newStr)) // if there is any character "outside"
return false; // leave, the input is in a different encoding
if (IsValidUtf8(data) == 0) // test data to be valid UTF-8 byte sequence
return false; // if not, can not convert to UTF-8
text = Encoding.UTF8.GetString(data);
return true;
}

我知道这不是最好的(或正确的解决方案),但我没有找到任何其他方法来修复输入...

编辑:(2017 年 7 月 20 日)

看来微软已经发现了这个错误,现在它可以正常工作了。我不确定问题是否出在某些框架中,但我可以肯定的是,现在应用程序使用了与我编写答案时不同的框架。 (现在是4.5,之前的版本是2.0)(现在我所有的代码都无法解析数据。还有一个问题是确定已应用修复和未应用修复的应用程序的正确行为。)

关于c# - 如何从剪贴板中获取正确编码的 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/238898/

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