从 xml 中删除非法的 0x1f 字符

Posted

技术标签:

【中文标题】从 xml 中删除非法的 0x1f 字符【英文标题】:remove illegal 0x1f charector from xml 【发布时间】:2012-05-25 14:39:19 【问题描述】:

我有一个程序可以生成一些数据并将其保存为 xml,不幸的是,出于我的目的,我无法将其保存在允许像 0x1f 这样的字符的较新 XML 中。因此,我需要从我的 xml 中删除这个字符。我所能找到的似乎就是这个http://benjchristensen.com/2008/02/07/how-to-strip-invalid-xml-characters/,但我不知道java-script,并且希望能够使用我能够理解的脚本。我知道基本的 C#,但不是很好。无论如何,过滤这个角色最简单的方法是什么?无论如何,我确实认为这对在线社区来说是一个很好的问题,因为从 Google 中寻找 C# 中的工作方法被证明是具有挑战性的。

【问题讨论】:

我从未听说过一种允许 XML 不允许的字符的 XML。能给个链接吗? 除非我读错了(对不起,我的英语不太好)这个:***.com/questions/6693153/what-is-character-0x1f 在第二个答案上似乎说有一个 xml 1.1 允许它“它在 XML 1.0 中确实不是有效的文本字符(但在 XML 1.1 中允许)。在 UTF-8 输入字符串中,您还可以安全地将字节 0x1f 替换为 0x09(Tab) 以解决该问题。或者,声明文档作为 XML 1.1 并使用 XML 1.1 解析器。” @约翰桑德斯 你现在如何保存xml? XML 1.1 规范可能允许这样做,但您假设存在 XML 1.1 解析器。如果您无法访问这样的解析器,那么规范允许的内容并不重要。它似乎没有被广泛实施。 【参考方案1】:

来自这个帖子:How can you strip non-ASCII characters from a string? (in C#)

根据您的情况调整它:

string s = File.ReadAllText(filepath);
s = Regex.Replace(s, @"[\u0000-\u001F]", string.Empty);
File.WriteAllText(newFilepath, s);

然后测试新文件。在你知道这是否有效之前,不要覆盖旧的。

【讨论】:

完美!万一其他人读到这个和我有同样的问题,请确保将“”放在你要在(文件路径)中使用的文件周围,因为它从我身边溜走并给了我一个编译器错误,因为我没有这样做它 这对我来说效果更好: sprefs = System.Text.RegularExpressions.Regex.Replace(sprefs, @"[\u001F-\u001F]", string.Empty);另一个更具包容性,把我的xml内容变成了一行。 @AdamBruss [a-z] 是您所看到的一系列字符。如果您只想替换一个字符,您所做的工作有效,但过于冗长:) 相反,您可以使用@"\u001F"。但即使这样也比需要的复杂。对于这样一个简单的情况,普通的字符串替换应该可以正常工作。不需要正则表达式。

以上是关于从 xml 中删除非法的 0x1f 字符的主要内容,如果未能解决你的问题,请参考以下文章

从UTF-8字符串中删除非法的XML字符

Java用非法XML字符解组xml

非法字符 - CTRL-CHAR

如何从路径和文件名中删除非法字符?

字符串中的“→”导致错误“在 SQL/XML 表达式中发现非法 XML 字符 001A”(DB2)

为什么“控制”字符在XML 1.0中是非法的?