string.IndexOf () erkennt geänderte Zeichen nicht

7

Wenn Sie IndexOf verwenden, um nach einem char zu suchen, dem ein character mit hoher Wertigkeit folgt (z. B. char 700, der '), dann erkennt IndexOf das gesuchte Zeichen nicht.

z.B.

%Vor%

In diesem Code sollte Index 2 sein, aber es gibt 6 zurück.

Gibt es eine Möglichkeit, dies zu umgehen?

    
puser 21.10.2013, 13:49
quelle

2 Antworten

7

Das -Konstrukt wird als sprachlich anders als die einfachen Bytes gehandhabt. Verwenden Sie den String-Vergleich, um einen Bytevergleich zu erzwingen.

%Vor%     
Loofer 21.10.2013, 13:53
quelle
14

Der Unicode-Buchstabe 700 ist ein Modifizierer-Apostroph : mit anderen Worten, er ändert das Buchstabe c. Auf die gleiche Weise, wenn Sie ein "e" verwenden würden, gefolgt von Zeichen 769 (0x301) < Es wäre nicht mehr ein "e": Das e wurde mit einem akuten Akzent modifiziert. Um zu sagen: é. Sie werden sehen, dass dieser Buchstabe eigentlich aus zwei Zeichen besteht: Kopieren Sie ihn in den Notizblock und drücken Sie die Rücktaste (sauber, nicht wahr?).

Sie müssen einen "Ordinalvergleich" (Byte für Byte) ohne linguistischen Vergleich durchführen. Das wird das "c" finden und die linguistische Tatsache ignorieren, dass es durch den nächsten Buchstaben modifiziert wird. In meinem "e" -Beispiel sind die Bytes (65) (769). Wenn Sie Byte für Byte nach 65 suchen, werden Sie es finden, und das ignoriert die Tatsache, dass (65) (769) sprachlich das ist wie (233): é. Wenn Sie (233) sprachlich suchen, finden Sie das "Äquivalent" (65) (769):

%Vor%

Hoffentlich ist das nicht zu verwirrend. Wenn Sie dies in echtem Code tun, sollten Sie in Kommentaren genau erklären, was Sie tun: Wie in meinem 'e' Beispiel würden Sie im Allgemeinen semantische Äquivalenz für Benutzerdaten und ordinale Äquivalenz für z. Konstanten (die hoffentlich nicht anders wären, damit Ihr Nachfolger Sie nicht jagen kann mit einer Axt ).

    
Mark Sowul 21.10.2013 13:56
quelle

Tags und Links