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

| 我从最近使用的Web服务接收到的某些文本遇到了一些困难。该Web服务发送回XML,这很好,但是我们在某些XML的中间获取了ASCII控制字符。我想在此帖子中粘贴一个示例,但由于字符无效,我什至无法将其粘贴到此textarea中。 我花了一些时间研究在这些情况下的处理方法,然后发现了这篇翔实的文章: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数据中有\“ no business \\”听起来很确定,但我想再说一遍。 感谢任何反馈     
已邀请:
        好吧,您所显示的代码假设使用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(); 
    

要回复问题请先登录注册