gpt4 book ai didi

c# - 从 Word 粘贴 + 创建 XML 文档 -> 十六进制值 0x0C,是无效字符 (.Net)

转载 作者:数据小太阳 更新时间:2023-10-29 02:18:16 24 4
gpt4 key购买 nike

我有一个接受用户 HTML 输入的网页。使用 System.Xml 命名空间将输入转换为 xml 文档,如下所示:

var doc = new XmlDocument();
doc.AppendChild(doc.CreateElement("root"));
doc.DocumentElement.SetAttribute("BodyHTML", theTextBox.Text);

然后对数据使用 Xsl 转换 (System.Xml.Xsl.XslCompiledTransform)。

用户倾向于在 Microsoft Word 中使用项目符号、引号等编写文本。当粘贴到我的页面时,他们的文本包含无效字符,例如 0x0C、0x03 等。使用xsl转换时,出现“十六进制值0x0C,是无效字符”的错误。

到目前为止,我的解决方法是使用循环和 String.Replace 消除我发现令人反感的字符:从 0 到 31 的所有字符,除了 9、10 和 13 都被替换为 String.Empty

我正在寻找一种更好的方法来做到这一点。内置的 .Net 方法?或者可能只是非法 unicode 字符的完整列表。

最佳答案

找到两个做同样事情的答案

  1. http://seattlesoftware.wordpress.com/2008/09/11/hexadecimal-value-0-is-an-invalid-character/
  2. http://www.theplancollection.com/house-plan-related-articles/hexadecimal-value-invalid-character

第一个使用 StringBuilder,逐个循环字符并过滤掉非法字符。第二个使用 Regex 和 .Replace 来完成同样的事情。两位作者都查看了 Xml 标准以找出哪些字符是非法的。

我对长字符串(1.8 MB 文件运行 1,000 次)和短字符串(“Hello world”运行 10,000,000 次)做了一些计时。 StringBuilder 方法比正则表达式快约 3 倍。正则表达式当然只编译了一次,这与我链接到的代码不同。

长字符串:

CleanInvalidXmlChars time: 00:00:07.4356230
SanitizeXmlString time: 00:00:02.3703305

短字符串:

CleanInvalidXmlChars time: 00:00:05.2805834
SanitizeXmlString time: 00:00:01.8319114

关于c# - 从 Word 粘贴 + 创建 XML 文档 -> 十六进制值 0x0C,是无效字符 (.Net),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2874330/

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