为什么.NET XML API不能保护我免受空字符的影响?

时间:2009-12-18 10:22:22

标签: .net xml xml-serialization escaping special-characters

我的应用程序从外部接收字符串并构造XML文档

string fromOutside = "\0";
XAttribute a = new XAttribute(fromOutside);

当属性值包含空字符时,我在尝试将XML保存到磁盘时遇到异常(当它进入XmlWriter时)

System.ArgumentException : '.', hexadecimal value 0x00, is an invalid character.

即使是SecurityElement课程也无济于事

Assert.IsFalse(SecurityElement.IsValidAttributeValue("\0"));

从可能包含null字符等无效字符的字符串构造XML文档的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您无法转义非打印字符(例如NULL),因为没有为它们定义等效的转义字符。除非您有HEX或Base64编码的片段,否则无法表示它。因此,您可以对Base64进行编码,也可以确保它不包含非打印字符。

string fromOutside = "\0";
string base64Encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(fromOutside));
XAttribute a = new XAttribute("id", base64Encoded);

答案 1 :(得分:0)

我发现了一篇很好的博文,其中作者提供了从字符串中删除无效的不可打印字符的代码

http://seattlesoftware.wordpress.com/2008/09/11/hexadecimal-value-0-is-an-invalid-character/