C# XDocument解析字符串-空终止符问题

C# XDocument解析字符串-空终止符问题,c#,xml-serialization,linq-to-xml,C#,Xml Serialization,Linq To Xml,因此,我以XML字符串的形式从第三方获取数据 然后我想做下面的事情 messageString = Encoding.ASCII.GetString(messageBeingSent); messageString = messageString.Trim(); XDocument xmlDoc = XDocument.Parse(messageString); 但是,它出错了,给了我一个例外 十六进制值0x00是无效字符。第1行,位置x,其中x是字符串中的最后一个字符 在我看来,一个空终止

因此,我以XML字符串的形式从第三方获取数据

然后我想做下面的事情

messageString = Encoding.ASCII.GetString(messageBeingSent);
messageString = messageString.Trim();

XDocument xmlDoc = XDocument.Parse(messageString);
但是,它出错了,给了我一个例外 十六进制值0x00是无效字符。第1行,位置x,其中x是字符串中的最后一个字符

在我看来,一个空终止符与字符串一起发送,然后XDocument由于空终止符而翻转


这个问题的解决方案是什么?

我不得不说,解决方案似乎很简单

messageString = messageString.replace("0x00", "");
或者如果你确定它是空的:

string s = myEncoding.GetString(bytes.TakeWhile(b => !b.Equals(0)).ToArray());

我不得不说,看来解决办法很简单

messageString = messageString.replace("0x00", "");
或者如果你确定它是空的:

string s = myEncoding.GetString(bytes.TakeWhile(b => !b.Equals(0)).ToArray());

null字符在XML中无效

您可以传递要修剪的字符:

 messageString.Trim(' ', '\0', ....);

null字符在XML中无效

您可以传递要修剪的字符:

 messageString.Trim(' ', '\0', ....);

0x00表示空终止符,实际上在字符串中看不到。理论上,您可以将该文本从文本可视化工具复制并粘贴到记事本中,将其另存为XML,它将是有效的。如果您确信它实际上不在文本中,并且它在结果集中是多余的null,则可以在替换中使用“\0”,或者将字符串复制到字节数组,然后将字节复制回字符串,但跳过值为0的字节。(虽然替换“\0”的作用与此大致相同)在应答中添加一段额外的代码。0x00表示一个空终止符,实际上在字符串中看不到。理论上,您可以将该文本从文本可视化工具复制并粘贴到记事本中,将其另存为XML,它将是有效的。如果您确信它实际上不在文本中,并且它在结果集中是多余的null,则可以在替换中使用“\0”,或者将字符串复制到字节数组,然后将字节复制回字符串,但跳过值为0的字节。(虽然替换“\0”的作用与此基本相同)在答案中添加一段用于此情况的附加代码。0在XML中无论位置如何都无效-是的,它只是无效,还有ASCII>128和许多其他控制字符。谢谢!这就是答案0在XML中无论位置如何都是无效的-是的,它只是无效,还有ASCII>128和许多其他控制字符。谢谢!这就是答案,你应该考虑清楚什么是主动发送和妥善处理。也就是说,它可以是C样式(null结尾)UTF-8字符串,您尝试以长度处理ASCII字符串……您应该考虑清楚什么是实际发送并适当处理它。也就是说,它可能是C样式(以null结尾)utf-8字符串,您尝试将其作为长度为。。。