如何解决从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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。