2011-07-23 54 views
11

我發現this問題,但它也刪除了所有有效的utf-8字符(返回一個空字符串,而有效的utf-8字符加上控制字符)。當我讀到utf-8時,control characters沒有特定的範圍,每個字符集都有它自己的control characters從UTF-8字符串中刪除控制字符

如何修改above解決方案以僅刪除control characters

+3

你知道,用幾行代碼(究竟是UTF-8字符串?)和文本的小樣本,這將開始看起來像一個真正的題。 –

+0

真正的字符串是帶有一些分號和控制字符的阿拉伯語'utf-8'字符串。我提供了一個最類似問題的鏈接:http://stackoverflow.com/questions/20762/how-do-you-remove-invalid-hexadecimal-characters-from-an-xml-based-data-source-pr – Xaqron

+0

你如何定義控制字符?那些代碼點爲<32的? – CodesInChaos

回答

17

我認爲下面的代碼會爲你工作:

public static string RemoveControlCharacters(string inString) 
{ 
    if (inString == null) return null; 
    StringBuilder newString = new StringBuilder(); 
    char ch; 
    for (int i = 0; i < inString.Length; i++) 
    { 
     ch = inString[i]; 
     if (!char.IsControl(ch)) 
     { 
      newString.Append(ch); 
     } 
    } 
    return newString.ToString(); 
} 
+0

謝謝。有無效的控制字符.'異常,而試圖將該字符串設置爲'HttpHeader'。 – Xaqron

+0

@Xaqon它並不適用於所有控制字符。我已經改變了條件爲!!char.IsControl(ch)'現在它 – Centro

+0

我發現這個問題,它不是關於真正的「控制字符」,任何像'\「',';'等特殊字符都會產生問題。我不知道如何從'utf-8'字符串中刪除它們。 – Xaqron

0

如果您打算使用的字符串作爲查詢字符串,你應該考慮使用Uri.EscapeUriString()Uri.EscapeDataString()發送出去之前。 注意:您可能仍需要首先從char.IsControl()中取出任何東西?

16

這是我的風格:

Regex.Replace(evilWeirdoText, @"[\u0000-\u001F]", string.Empty) 

這剔除了所有的前31個控制字符。從\ u001F開始的下一個十六進制值是\ u0020和空格。空格前的所有內容都是換行符和空廢話。

相信我對人物:http://donsnotes.com/tech/charsets/ascii.html