Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么.NETXMLAPI没有';你不能保护我不受空字符的影响吗?_.net_Xml_Xml Serialization_Escaping_Special Characters - Fatal编程技术网

为什么.NETXMLAPI没有';你不能保护我不受空字符的影响吗?

为什么.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字符等)的字符串

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

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);