为什么.NETXMLAPI没有';你不能保护我不受空字符的影响吗?
我的应用程序从外部接收字符串并构造XML文档为什么.NETXMLAPI没有';你不能保护我不受空字符的影响吗?,.net,xml,xml-serialization,escaping,special-characters,.net,Xml,Xml Serialization,Escaping,Special Characters,我的应用程序从外部接收字符串并构造XML文档 string fromOutside = "\0"; XAttribute a = new XAttribute(fromOutside); 当属性值包含空字符时,我在尝试将XML保存到磁盘时遇到异常(当它进入XmlWriter) 即使是SecurityElement类也没有帮助 Assert.IsFalse(SecurityElement.IsValidAttributeValue("\0")); 从可能包含无效字符(如null字符等)的字符串
string fromOutside = "\0";
XAttribute a = new XAttribute(fromOutside);
当属性值包含空字符时,我在尝试将XML保存到磁盘时遇到异常(当它进入XmlWriter
)
即使是SecurityElement
类也没有帮助
Assert.IsFalse(SecurityElement.IsValidAttributeValue("\0"));
从可能包含无效字符(如null字符等)的字符串构造XML文档的最佳方法是什么?不能转义非打印字符(如null),因为没有为它们定义等效的转义字符。除非有十六进制或Base64编码的片段,否则不能表示它。因此,您可以对字符串进行Base64编码,或者确保它不包含非打印字符
string fromOutside = "\0";
string base64Encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(fromOutside));
XAttribute a = new XAttribute("id", base64Encoded);
我还发现了一篇很好的博客文章,作者提供了从字符串中删除无效的不可打印字符的代码
所以在我的例子中,唯一的方法就是解析字符串并删除空字符,不是吗-(不,您也可以对字符串进行Base64编码:
Convert.ToBase64String(Encoding.UTF8.GetBytes(fromOutside))
Base64不是我的选项,因为我必须使字符串在结果XML中保持可读性。字符串的示例可以是“\0My\0\0ue\0\0”。那么,您必须使用自己的函数,该函数将用\\code
替换所有不可打印的字符。
string fromOutside = "\0";
string base64Encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(fromOutside));
XAttribute a = new XAttribute("id", base64Encoded);