Wenn ich eine Zeichenfolge habe, die diakritische Zeichen enthält, scheint etwas Verwirrung zwischen dem Verhalten zwischen verschiedenen Zeichenfolgenfunktionen zu bestehen. Wenn ich String.IndexOf()
verwende, wird es das diakritische kombinieren und das richtige Zeichen finden. Wenn ich String.Split()
verwende, wird es aus irgendeinem Grund nicht kombinieren und das kombinierte Zeichen nicht finden.Unterschiedliches Verhalten beim Kombinieren von diakritischen Zeichenfolgen zwischen String.Split() und String.IndexOf()
Beispielcode:
string test = "abce\u0308fgh";
Console.WriteLine(test.IndexOf("e"));
Console.WriteLine(test.IndexOf("ë"));
Dies wird wie erwartet, wird die E Sinn nicht gefunden, aber die ë ist. Aber aus irgendeinem Grund, dies verhält sich nicht ähnlich:
string test = "abcde\u0308fgh";
Console.WriteLine(test.Split('e').Length.ToString());
Console.WriteLine(test.Split('ë').Length.ToString());
Aus irgendeinem Grund Split()
nicht die diakritischen kombinieren und per E geteilt wird, aber nicht durch ë.
Gibt es einen Grund für diese Funktionalität und ist es eine Möglichkeit, entweder eine IndexOf()
Funktion haben, die nicht die diakritischen nicht kombinieren, oder vorzugsweise eine Split()
Funktion, das tut?
Edit: Bemerkt ich früher falsche Code geschrieben hatte, hatte es ‚e‘ und nicht „e“
string test = "abce\u0308fgh";
Console.WriteLine(test.IndexOf('e'));
Console.WriteLine(test.IndexOf('ë'));
Dieses auch als Split()
verhält, so ist es nicht zwischen den Methoden, ist es zwischen ein Zeichen oder eine Zeichenkette nehmen.
Hinzufügen 'test = test.Normalize();' –
@HansPassant Nicht immer können die Daten normalisiert werden, die diakritischen Zeichen (oder andere Informationen) können wünschenswert sein, getrennt zu bleiben. Andernfalls wäre 'Normalize()' der richtige Weg. Ich bin mir auch nicht sicher, ob es für jedes Diakritikum ein kombiniertes Zeichen gibt. –
Sie müssen ein besseres Beispiel finden. Ich bezweifle ernsthaft, dass du einen finden wirst. –