2014-05-20 7 views
5

In VS2012 der C# den folgenden Code:IndexOf Übereinstimmung, wenn Unicode 0xFFFD in der Zeichenfolge ist - Bug oder Feature?

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

Ergebnisse in einem

True 

gedruckten Ausgabefenster auf der Konsole. Die Leerzeichen sind durch 0xFFFD getrennt und stimmen dennoch mit zwei aufeinander folgenden Leerzeichen überein. Ist das ein erwartetes Ergebnis/Merkmal oder ein (bekannter) Fehler?

+0

Ist es nur unerwartet, weil in Ihrer Vergleichszeichenfolge zwei Leerzeichen enthalten sind? – BradleyDotNET

+3

Sie können für die Demo möglicherweise andere sichtbare Zeichen als Leerzeichen verwenden. –

+0

Vereinfachen, was Sie haben, Ihre Frage ist, warum ' "[\ uFFFD]"' enthält '“ „' –

Antwort

7

Es ist ein erwartetes Ergebnis. FFFD ist ein "Ersatzzeichen" in Unicode und ist in keiner Kultur sinnvoll. IndexOf ignoriert alle nicht aussagekräftigen Zeichen in seiner Suche:

Zeichensätze ignorable Zeichen, welche Zeichen sind, die nicht berücksichtigt werden, wenn eine sprachliche oder kulturabhängigen Vergleich durchgeführt wird.

+0

ich gelesen, dass vor meinem Kommentar verfasst, war aber nicht sicher, ob FFFD war ignorable. Danke für die tolle Info! – BradleyDotNET

+0

Wenn es in der ignorierbaren Menge wäre, würde das [hier] nicht angezeigt werden (http://unicode.org/cldr/utility/character.jsp?a=FFFD)? –

+0

@D Stanley: Danke, ich hätte C# Handbuch sorgfältiger lesen sollen. "Strange behaviour" von IndexOf (...) kostete mich (ziemlich) einige Zeit isolieren und Fixieren (Ersetzen mit RegEx's Replace) zufällige Endlosschleife wie folgt: 'while (test.IndexOf (" ")> = 0) test = test.Replace ("", ""); ' – ShamilS

Verwandte Themen