c#:保护XmlTextReader不受偶尔出现的Unicode字符的影响



在c#中,我有一个直接从HTTP响应创建的XmlTextReader(我无法控制响应的XML内容)。

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
XmlTextReader reader = new XmlTextReader(response.GetResponseStream());

它可以工作,但有时其中一个XML元素节点将包含Unicode字符(例如:"),这让读者感到困惑。我尝试使用声明编码的StreamReader,但现在XmlTextReader在第一行退出:"数据无效。第一行,位置1":

StreamReader sReader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Unicode);
XmlTextReader reader = new XmlTextReader(sReader);

有办法解决这个问题吗?或者,是否有一种方法可以防止XmlTextReader解析具有潜在违规字符的元素(我知道它的名称)?我不关心那个特定的元素,我只是不想让它绊倒读者。

编辑:快速修复:将响应读入StringBuilder ("sb"):

sb.Replace("é", "e");
StringReader strReader = new StringReader(sb.ToString());
XmlTextReader reader = new XmlTextReader(strReader);

它不是Unicode字符,它是一个无效的字符(未正确编码)。

没有办法保护XmlTextReader免受无效XML的影响。您需要

  • 修复服务器端正确编码字符
  • 预处理文本,自己完成

根据UTF8,所有这样的字符(" ")都用2或3字节(或更多)进行编码。您可以使用十六进制编辑器来验证它。

"绊倒读者"是什么意思?你的第一个代码片段应该没问题——如果XML确实在它声明的编码中(请查看XML声明),那么它应该绝对没问题。

如果XML真的被破坏了,我建议在 XML解析之前执行某种过滤(例如,将XML加载到具有正确编码的字符串中,然后修复声明的编码以匹配)…但是我们需要先找出问题所在。

相关内容

  • 没有找到相关文章

最新更新