2014-05-20 7 views
5

In di VS2012 C# il codice seguente:IndexOf matching quando Unicode 0xFFFD si trova nella stringa - bug o funzione?

string test = "[ " + (char)0xFFFD + " ]"; 
System.Console.WriteLine("{0}", test.IndexOf(" ") == 1); 

risultati in un

True 

stampati finestra di uscita per consolare. Gli spazi sono separati da 0xFFFD eppure corrispondono a due spazi consecutivi. È un risultato/caratteristica atteso o un bug (noto)?

+0

È solo inatteso perché nella stringa di confronto ci sono due spazi? – BradleyDotNET

+3

Potrebbe essere necessario utilizzare caratteri visibili diversi dagli spazi per la demo. –

+0

Semplificare quello che hai, la tua domanda è il motivo per ' "[\ uFFFD]"' contiene '" "' –

risposta

7

È un risultato previsto. FFFD è un "carattere sostitutivo" in Unicode e non ha alcun significato in nessuna cultura. IndexOf ignora i caratteri non significativi nella sua ricerca:

I set di caratteri includono caratteri trascurabili, che sono i caratteri che non sono considerati quando si esegue una comparazione linguistica o sensibili cultura.

+0

Ho letto che prima di pubblicare il mio commento, ma non era sicuro se fosse FFFD ignorabile. Grazie per le fantastiche informazioni! – BradleyDotNET

+0

Se fosse nel set ignorabile, non sarebbe indicato [qui] (http://unicode.org/cldr/utility/character.jsp?a=FFFD)? –

+0

@D Stanley: Grazie, avrei dovuto leggere il manuale C# con più attenzione. "Strange behaviour" di IndexOf (...) mi è costato (abbastanza) un po 'di tempo isolando e riparando (sostituendo con RegEx's Replace) un ciclo infinito casuale come il seguente: 'while (test.IndexOf (" ")> = 0) test = test.Replace ("", ""); ' – ShamilS

Problemi correlati