正在从Web服务输出中清除ASCII控制字符
本文关键字:清除 ASCII 控制字符 输出 服务 Web | 更新日期: 2023-09-27 17:58:58
我最近从一个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数据中"没有任何意义",这听起来是最后一句话,但我想要另一种观点。
感谢的任何反馈
好吧,您显示的代码是假设UTF-8-由于其设计方式,UTF-8的数据中永远不会有任何字节。然而,我鼓励使用文本驱动的方法,而不是这种字节驱动的方法——我可能会使用DownloadString
而不是DownloadData
(并依靠WebClient
选择正确的编码),但在解析数据之前用正则表达式清除数据。
我会也联系网络服务提供商,解释他们正在提供duff XML。。。
尝试以下操作:
byte[] byteArray = Encoding.ASCII.GetBytes( test );
MemoryStream stream = new MemoryStream( byteArray );
stream.Position = 0;
StreamReader reader = new StreamReader( stream );
string text = reader.ReadToEnd();