我从最近使用的 Web 服务收到的一些文本遇到了一些困难。Web 服务发回 XML,这很好,但是我们在一些 XML 的中间得到了 ASCII 控制字符。我想在这篇文章中粘贴一个示例,但由于是无效字符,我什至无法将其粘贴到此文本区域中。
我花了一些时间研究在这些情况下该怎么做,我发现了这篇内容丰富的文章:http ://seattlesoftware.wordpress.com/2008/09/11/hexadecimal-value-0-is-an-invalid-character/ 。这是本文的相关引述:
这些不是在 XML 数据中有任何业务的字符;它们是应该删除的非法字符...
因此,按照文章的建议,我编写了一些代码来获取该服务的原始输出并将其去除任何作为控制字符的字符(并且不是空格、制表符、cr 或 lf)
这是该代码:
System.Net.WebClient client = new System.Net.WebClient();
byte[] invalidCharacters = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0xB,
0xC, 0xE, 0xF, 0x10, 0x11, 0x12, 0x14, 0x15, 0x16,
0x17, 0x18, 0x1A, 0x1B, 0x1E, 0x1F, 0x7F };
byte[] sanitizedResponse = (from a in client.DownloadData(url)
where !invalidCharacters.Contains(a)
select a).ToArray();
result = System.Text.UTF8Encoding.UTF8.GetString(sanitizedResponse);
不过,这让我开始思考。如果我收到双字节字符,我会搞砸我得到的任何数据吗?某些代码页具有由一个或两个单字节 ASCII 控制字符组成的双字节字符是否有效?文章说这些字符在 XML 数据中“没有业务”听起来是最后的,但我想要第二个意见。
感谢任何反馈