2011-07-23 13 views
11

Znalazłem this pytanie, ale usuwane są również wszystkie ważne znaki utf-8 (zwraca mi pusty ciąg znaków, podczas gdy istnieją ważne znaki utf-8 plus znaki kontrolne). Jak czytałem o utf-8, nie ma określonego zakresu dla control characters i każdy zestaw znaków ma swój własny control characters.Usuwanie znaków sterujących z ciągu UTF-8

Jak mogę zmienić rozwiązanie above, aby usunąć tylko control characters?

+3

Wiesz, za pomocą kilku linii kodu (co dokładnie jest UTF-8 ciąg?) I mała próbka tekstu to zaczną wyglądać jak prawdziwa pytanie. –

+0

prawdziwy ciąg to arabski ciąg 'utf-8' z pewnymi średnikami i znakami kontrolnymi. Podałem link do najbardziej podobnego pytania: http://stackoverflow.com/questions/20762/how-do-you-remove-invalid-hexadecimal-characters-od-an-xml-based-data-source-pr – Xaqron

+0

Jak definiujesz znaki kontrolne? Te z codepoint '<32'? – CodesInChaos

Odpowiedz

17

myślę następujący kod będzie pracować dla Ciebie:

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

Dzięki. Nadal otrzymuję 'Określoną wartość ma nieprawidłowy wyjątek znaków kontrolnych podczas próby ustawienia łańcucha jako 'HttpHeader'. – Xaqron

+0

@Xaqon To nie działało dla wszystkich znaków kontrolnych. Zmieniłem warunek na'! char.IsControl (ch) 'i teraz to jest powinienem pracować dla ciebie – Centro

+0

Znalazłem problem, nie chodzi o prawdziwe "znaki kontrolne" .Dowolny znak specjalny, taki jak '\" ','; 'itp sprawia, że ​​problem. Nie mam pojęcia, jak usunąć je z ciągu 'utf-8'. – Xaqron

0

Jeśli planujesz używać ciąg jako ciąg kwerendy, należy rozważyć użycie Uri.EscapeUriString() lub Uri.EscapeDataString() przed wysłaniem go na zewnątrz. Uwaga: Być może najpierw trzeba będzie wyciągnąć cokolwiek z char.IsControl()?

16

ten sposób Ja toczę:

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

To pozbawia wszystkie pierwsze 31 znaków sterujących. Następną wartością szesnastkową w górę od \ u001F jest AKA przestrzeń. Wszystko przed spacja jest cały wiersz i zerowe bzdury.

Wierzyć mi na postaci: http://donsnotes.com/tech/charsets/ascii.html

Powiązane problemy