Domanda

Immaginare ho Stringa in C#:"Ho Donââ, â"¢t see ya.."

Voglio rimuovere (sostituire a nulla o ecc.) questi "ââ, â"¢" simboli.

Come faccio a fare questo?

È stato utile?

Soluzione

Che 'junk' sembra un po ' come qualcuno ha interpretato i dati UTF-8 a ISO 8859-1 o Windows-1252, probabilmente più volte.

ââ, â"¢ è la sequenza C3 A2, E2 82 AC, E2 84 A2.

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

Abbiamo poi farlo di nuovo:in Windows 1252 questa sequenza è E2 80 99, in modo che il personaggio dovrebbe essere stato U+2019, a DESTRA VIRGOLETTE SINGOLE (’)

Si potrebbe fare più passaggi con matrici di byte Codifica.UTF8 e la Codifica.GetEncoding(1252) per girare correttamente la spazzatura di nuovo in quello che originariamente era entrato.Avrete bisogno di controllare il vostro elaborazione di trovare i due luoghi che i dati UTF-8 è stato erroneamente interpretato come Windows-1252.

Altri suggerimenti

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

Come hai fatto a junk arrivare lì al primo posto?Questa è la vera domanda.

Rimozione di eventuali caratteri non latino sarete intenzionalmente la rottura di alcuni di supporto all'internazionalizzazione.

Non dimenticare il povero ragazzo che ha un "â" in esso.

Questo sembra molto familiare per un problema di codifica dei caratteri a trattare con il set di caratteri di Windows che vengono memorizzati in un database utilizzando lo standard di codifica dei caratteri.Vedo che qualcuno ha votato Si, ma ha un punto.Si può risolvere il problema immediato, ma le combinazioni di caratteri sono infinite, se questo è il problema.

Se si hanno veramente a fare questo, le espressioni regolari sono probabilmente la soluzione migliore.

Vorrei consigliamo di riflettere sul perché si ha a che fare questo, però - almeno alcuni dei personaggi che il tuo elenco, come indesiderabili sono perfettamente validi e utili in altre lingue, e filtra appena fuori sarà più probabile infastidire almeno alcuni dei vostri utenti internazionali.Come uno svedese, non posso sottolineare abbastanza quanto io odio sistemi che non possono gestire il nostro å, ä e ö correttamente i caratteri.

Considerare Regex.Sostituire(your_string, regex, "") - che è quello che uso io.

Test di ogni personaggio in giro per vedere se si tratta di un valido alfabetico o numerico carattere e se poi non rimuoverlo dalla stringa.Il personaggio è un test molto semplice, basta utilizzare...

char.IsLetterOrDigit;

Per favore, ci sono vari altri come...

char.IsSymbol;
char.IsControl;

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

Ecco come si farebbe in C#, anche se tale espressione regolare ([^a-zA-Z ]) dovrebbe funzionare nella maggior parte delle lingue.

[Modificato:hai dimenticato lo spazio nel regex]

ASCII / codice Integer per questi personaggi sarebbe stato al di fuori del normale alfabetico Gamme.Cercare e sostituire con i caratteri vuoti.La stringa ha un metodo di Sostituzione, io credo.

Utilizzare una lista nera di roba che non vuoi, o, preferibilmente, una "white list" (set).Con una " lista bianca scorrere la stringa e solo copiare le lettere che sono nella tua lista bianca per la stringa risultante.Hai detto rimuovere, e il modo di fare che sta avendo due puntatori a quello che si legge da (R) e quello della scrittura (W):

I Donââ‚
     W  R

se la virgola è in whitelist quindi si sarebbe in questo caso leggere la virgola e scrivi dove à poi avanzare entrambi i puntatori.UTF-8 è una codifica multi-byte, quindi avanzare il puntatore non solo può essere aggiunta all'indirizzo.

Con C un facile modo per ottenere una "white list" utilizzando una delle funzioni predefinite (o macro):isalnum, isalpha, isascii, isblank, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit.In questo caso si invia con una lista bianca invece la funzione di un insieme di corso.

Di solito quando vedo i dati come cerco di corruzione della memoria, o prove che suggeriscono che la codifica mi aspetto è diverso da quello per cui sono stati immessi i dati con.

/Allan

Ho avuto lo stesso problema con estranei spazzatura generata da adobe, in un EXIF dump.Ho passato un ora alla ricerca di una risposta diretta e cercando di numerosi cotto a metà suggerimenti che non ha funzionato qui.

Questo thread più che ho letto era pieno e profondo, con le domande di sondaggio 'come ha fatto ad arrivarci?', "e se qualcuno ha questo carattere nel loro nome?', 'sei sicuro di voler rompere l'internazionalizzazione?'.

Ci sono stati alcuni impressionanti mostra di erudizione postulando come questa spazzatura potrebbe avere ottenuto qui e spiegare l'evoluzione dei vari schemi di codifica dei caratteri.La persona che voleva sapere come rimuovere, non come è venuto per essere, o quello che gli standard organizzazioni sono, interessanti come questa curiosità può essere.

Ho scritto un piccolo programma che mi ha dato la risposta giusta.Invece parafrasando il concetto principale, qui è l'intero, self-contained, funziona (almeno sul mio sistema) e l'output che ho usato per nuke indesiderata:

#!/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<

È NORMALE!!!

Un altro perseguibile, lavorando suggerimento mi sono imbattuto in:iconv -c -t ASCII < 6s-2014.1031-238246.di halloween.exf.dif > exf.ascii.dif

Se la Stringa di avere qualsiasi Spazzatura data , Questo è un buon modo per rimuovere quelli indesiderati data

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

     //OutputString having the following result 

Funziona bene per me , grazie per la ricerca di questa recensione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top