我從最近使用的Web服務接收到一些文本時遇到了一些困難。 Web服務發回XML,這很好,但我們在某些XML中獲得了ASCII控制字符。我想在這篇文章中粘貼一個例子,但是無效的字符,我甚至無法將其粘貼到這個textarea。從Web服務輸出中清理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數據中沒有「沒有業務」的聲音聽起來最終,但我想要第二個意見。
欣賞任何反饋
由於這是無痛的! :) – omatase 2011-06-13 17:19:29
如果您使用C#字符而不是字節,您還可以使用'Char.IsControl()'而不是硬編碼控制字符。 – 2011-06-13 17:50:21
這是很好的建議,但我需要空間,標籤,回車等留下來。 – omatase 2011-06-13 18:28:05