Frage

Stellen Sie sich vor ich habe String in C #: „Ich Donà ¢ Â'¬â„¢ t ya sehen .. "

Ich möchte zu entfernen (ersetzen, um nichts oder etc.) diese „à ¢ â, ¬ â„¢“Symbole.

Wie kann ich das tun?

War es hilfreich?

Lösung

Die 'Junk' sieht viel wie jemand interpretierte UTF-8-Daten als ISO 8859-1 oder Windows-1252, wahrscheinlich wiederholt.

¢ Â'¬â „¢ die Sequenz C3 A2, E2 82 AC, E2 A2 84.

  • UTF-8-C3 A2 = U + 00E2 = a
  • UTF-8 E2 82 AC = U + 20AC = €
  • UTF-8-E2 A2 = U 84 + 2122 = ™

Wir tun es dann wieder: in Windows 1252 ist diese Sequenz E2 80 99, so sollte der Charakter gewesen sein U + 2019 RECHTS Apostroph (‘)

Sie können mehrere Durchgänge mit Byte-Arrays, Encoding.UTF8 und Encoding.GetEncoding (1252) machen richtig die Junk zurück in drehen, was ursprünglich eingegeben wurde. Sie müssen Ihre Verarbeitung überprüfen, die zwei Stellen zu finden, dass UTF-8-Daten fälschlicherweise als Windows 1252 interpretiert wurden.

Andere Tipps

"I Don’t see ya..".Replace( "’", string.Empty);

Wie kommt es, dass Junk dort den ersten Platz? Das ist die eigentliche Frage.

Mit dem jede nicht-lateinischen Zeichen entfernt werden Sie sein absichtlich etwas Internationalisierung Unterstützung zu brechen.

Sie nicht den armen Kerl vergessen, dessen Name hat eine „â“ drin.

Das sieht ein Zeichencodierung Problem verstörend vertraut mit dem Windows-Zeichensatz zu tun in einer Datenbank gespeichert werden, um die Standard-Zeichenkodierung verwendet wird. Ich sehe jemand niedergestimmt, aber er hat einen Punkt. Sie können die sofortige Ausgabe werden die Lösung, aber die Kombinationen von Zeichen sind keine Grenzen gesetzt, wenn dies das Problem ist.

Wenn Sie das wirklich zu tun haben, sind reguläre Ausdrücke wahrscheinlich die beste Lösung.

würde ich empfehlen, dass Sie darüber nachdenken, warum Sie dies tun müssen, obwohl - zumindest einige der Zeichen in anderen Sprachen Ihren Eintrag als unerwünscht sind perfekt gültig und nützlich, und das Filtern sie gerade aus wird höchstwahrscheinlich érgern mindestens einige Ihrer internationalen Nutzern. Als schwede, ich kann nicht genug betonen, wie sehr ich hassen Systeme, die nicht unsere å richtig, ä und ö Zeichen verarbeiten kann.

Betrachten Regex.Replace (your_string, regex, "") -. Das ist, was ich verwende

jedes Zeichen wiederum Prüfen Sie, ob es ein gültiges alphabetischen oder numerische Zeichen ist und wenn nicht, dann entfernt sie aus dem String. Der Charakter-Test ist sehr einfach, nur verwenden ...

char.IsLetterOrDigit;

Bitte gibt es verschiedene andere wie ...

char.IsSymbol;
char.IsControl;

Regex.Replace ( "Der String", "[^ a-zA-Z]", "");

Das ist, wie Sie es in C # tun würde, aber das ist für reguläre Ausdrücke ([^ a-zA-Z]) sollte in den meisten Sprachen arbeiten.

[Editiert: vergessen hat, den Raum in den regex]

Der ASCII / Integer-Code für diese Zeichen aus dem normalen alphabetischen Rang sein würde. Suchen und Ersetzen mit leeren Zeichen. String hat eine Methode ersetzen, glaube ich.

So oder eine schwarze Liste von Sachen verwenden Sie nicht wollen, oder vorzugsweise eine weiße Liste (set). Mit einer weißen Liste iterieren Sie über die Zeichenfolge und kopieren Sie nur die Buchstaben, die in Ihrer weißen Liste der Ergebniszeichenfolge sind. Sie sagten, entfernen, und die Art und Weise Sie das tun wird mit zwei Zeigern, die Sie aus (R) gelesen und eine Sie schreiben (W):

I Donââ‚
     W  R

Wenn Komma in ihr Adressbuch ist dann würden Sie in diesem Fall lesen Sie das Komma und schreiben Sie es in dem à dann beide Zeiger vorzurücken. UTF-8 ist eine Multi-Byte-Codierung, so dass Sie den Zeiger fort kann nicht nur an die Adresse hinzugefügt werden.

Mit C ein einfach zu Art und Weise eine weiße Liste zu erhalten, indem eine der vordefinierten Funktionen (oder Makros): isalnum, isalpha, isascii, isblank, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit. In diesem Fall senden Sie mit einer weißen Liste Funktion anstelle einem Satz natürlich auf.

Normalerweise, wenn ich Daten sehen, wie Sie mich für Speicherbeschädigung suchen haben oder Hinweise darauf, dass die Codierung ich als das ist anders erwarte die Daten eingegeben werden mit.

/ Allan

Ich hatte das gleiche Problem mit fremdem Müll von Adobe in einem EXIF-Dump geworfen. Ich verbrachte eine Stunde für eine klare Antwort suchen und zahlreiche unausgegorene Vorschläge versuchen, die hier nicht funktioniert hat.

Dieser Thread ist mehr als die meisten war ich mit tiefer voll gelesen habe, bohrende Fragen wie: ‚Wie kam es dazu?‘, ‚Was ist, wenn jemand dieses Zeichen in ihrem Namen hat?‘, ‚Sind Sie sicher, dass Sie Internationalisierung brechen ?‘.

Es gab einige beeindruckenden Displays von erudition Setzung, wie dieser Junk hier bekommen haben könnte und zu erklären, die Entwicklung der verschiedenen Zeichencodierungsschemata. Die Person wollte wissen, wie es zu entfernen, nicht, wie es dazu kam, oder das, was die Standards Orgs sind bis zu, so interessant diese Trivia sein kann.

Ich schrieb ein kleines Programm, das mir die richtige Antwort gab. Anstatt das Hauptkonzept paraphrasieren, hier ist die gesamte, in sich geschlossene, arbeiten (zumindest auf meinem System) Programm und die Ausgabe ich verwendet, um die Junk-Nuke:

#!/usr/local/bin/perl -w

# This runs in a dos window and shows the char, integer and hex values
# for the weird chars. Install the HEX values in the REGEXP below until
# the final test line looks normal. 
$str = 's: “Brian';  # Nuke the 3 werid chars in front of Brian.
@str = split(//, $str);
printf("len str '$str' = %d, scalar \@str = %d\n", 
    length $str, scalar @str);
$ii = -1;
foreach $c (@str)  {
   $ii++;
   printf("$ii) char '$c', ord=%03d, hex='%s'\n", 
       ord($c), unpack("H*", $c));
}
# Take the hex characters shown above, plug them into the below regexp
# until the junk disappears!
($s2 = $str) =~ s/[\xE2\x80\x9C]//g;  # << Insert HEX values HERE
print("S2=>$s2<\n");  # Final test

Result:
M:\new\6s-2014.1031-nef.halloween>nuke_junk.pl
len str 's: GÇ£Brian' = 11, scalar @str = 11
0) char 's', ord=115, hex='73'
1) char ':', ord=058, hex='3a'
2) char ' ', ord=032, hex='20'
3) char 'G', ord=226, hex='e2'
4) char 'Ç', ord=128, hex='80'
5) char '£', ord=156, hex='9c'
6) char 'B', ord=066, hex='42'
7) char 'r', ord=114, hex='72'
8) char 'i', ord=105, hex='69'
9) char 'a', ord=097, hex='61'
10) char 'n', ord=110, hex='6e'
S2=>s: Brian<

Es ist normal !!!

Ein anderer verwertbarer Arbeits Vorschlag lief ich über:     iconv -c -t ASCII <6s-2014.1031-238246.halloween.exf.dif> exf.ascii.dif

Wenn String das jedes Junk Datum mit, Das ist gut zu Art, wie dieses Junk-Datum zu entfernen

     string InputString = "This is grate kingdom¢Ã‚¬â"; 
     string replace = "’";
     string OutputString= Regex.Replace(InputString, replace, "");

     //OutputString having the following result 

Es funktioniert gut zu mir, vielen Dank für das Schauen dieser Bewertung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top