wake-up-neo.com

Entfernen Sie alle Nicht-ASCII-Zeichen aus der Zeichenfolge

Ich habe eine C # -Routine, die Daten aus einer CSV-Datei importiert, mit einer Datenbank abgeglichen und sie dann in eine Datei schreibt. Die Quelldatei scheint einige Nicht-ASCII-Zeichen zu haben, die die Verarbeitungsroutine stören. 

Ich habe bereits eine statische Methode, die ich jedes Eingabefeld durchführe, aber es führt grundlegende Überprüfungen wie das Entfernen von Kommas und Anführungszeichen durch. Weiß jemand, wie ich Funktionen hinzufügen könnte, die auch Nicht-ASCII-Zeichen entfernen?

41
user135498
string sOut = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(s))
41
EToreo

Hier eine einfache Lösung:

public static bool IsASCII(this string value)
{
    // ASCII encoding replaces non-ascii with question marks, so we use UTF8 to see if multi-byte sequences are there
    return Encoding.UTF8.GetByteCount(value) == value.Length;
}

quelle: http://snipplr.com/view/35806/

52
Jaider

Mach alles auf einmal 

public string ReturnCleanASCII(string s)
{
    StringBuilder sb = new StringBuilder(s.Length);
    foreach(char c in s)
    {
       if((int)c > 127) // you probably don't want 127 either
          continue;
       if((int)c < 32)  // I bet you don't want control characters 
          continue;
       if(c == ',')
          continue;
       if(c == '"')
          continue;
       sb.Append(c);
    }
    return sb.ToString();
}
10
paparazzo

Wenn Sie einen bestimmten Charakter testen möchten, können Sie verwenden

if ((int)myChar <= 127)

Wenn Sie nur die ASCII - Codierung des Strings erhalten, wird Ihnen nicht gesagt, dass ein bestimmtes Zeichen nicht ASCII war (wenn Sie sich darum kümmern). Siehe MSDN .

8
Eric J.

Hier ist eine Verbesserung gegenüber der akzeptierten Antwort:

string fallbackStr = "";

Encoding enc = Encoding.GetEncoding(Encoding.ASCII.CodePage,
  new EncoderReplacementFallback(fallbackStr),
  new DecoderReplacementFallback(fallbackStr));

string cleanStr = enc.GetString(enc.GetBytes(inputStr));

Diese Methode ersetzt unbekannte Zeichen durch den Wert von fallbackStr. Wenn fallbackStr leer ist, lassen Sie sie vollständig aus. (Beachten Sie, dass enc außerhalb des Gültigkeitsbereichs einer Funktion definiert werden kann.)

3
rookie1024

Es hört sich irgendwie komisch an, dass es akzeptiert wird, Nicht-ASCII-Zeichen zu löschen.

Außerdem empfehle ich immer die exzellente FileHelpers - Bibliothek zum Analysieren von CSV-Dateien.

2
Jonas Elfström
    public string RunCharacterCheckASCII(string s)
    {
        string str = s;
        bool is_find = false;
        char ch;
        int ich = 0;
        try
        {
            char[] schar = str.ToCharArray();
            for (int i = 0; i < schar.Length; i++)
            {
                ch = schar[i];
                ich = (int)ch;
                if (ich > 127) // not ascii or extended ascii
                {
                    is_find = true;
                    schar[i] = '?';
                }
            }
            if (is_find)
                str = new string(schar);
        }
        catch (Exception ex)
        {
        }
        return str;
    }
0
Ross Kelly