正在从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数据中"没有任何意义",这听起来是最后一句话,但我想要另一种观点。

感谢的任何反馈

正在从Web服务输出中清除ASCII控制字符

好吧,您显示的代码是假设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();