Gleichheit äquivalenter Unicode-Zeichenfolgen

336
Prem

Ich habe eine Frage zu Equality Equivalent Unicode Strings und habe etwas Python-Code angegeben, aber es kann eine allgemeine Frage für alle Programmiersprachen wie C, C ++, Perl oder Java sein.

Ich habe eine Zeichenfolge u, die eine Glyphe darstellt, die 05D1 (HEBREW LETTER BET) ist und 05BC (HEBREW POINT DAGESH) und 05B8 (HEBREW POINT QAMATS) enthält.

Ich habe einen anderen String v, der auch genau dieselbe Glyphe anzeigt, nämlich 05D1 (HEBREW LETTER BET), die 05B8 (HEBREW POINT QAMATS) und 05BC (HEBREW POINT DAGESH) enthält.

Der Unterschied liegt in der Reihenfolge des Einbaus oder der Kombination der "PUNKTE". Viele andere Sprachen und Buchstaben in Unicode können andere POINTS integrieren oder kombinieren, um eine Glyphe zu erstellen.

Jetzt sind u und v praktisch und visuell die gleiche Glyphe, können aber in Python nicht naiv verglichen werden:

>>> u='\u05D1\u05BC\u05B8' >>> v='\u05D1\u05B8\u05BC' >>> u 'בָּ' >>> v 'בָּ' >>> u==u True >>> v==v True >>> >>> u==v False >>> v==u False >>> u is v False >>> 

Wenn ich eine Webseite mit diesen Glyphen erstelle, die Webseite anzeigen und nach einer Glyphe suchen, behandelt Mozilla FireFox diese beiden als "Distinct", aber Google Chrome behandelt sie als gleich. Offensichtlich prüfen Python und FireFox die Byte-Gleichheit, während Chrome die Byte-Gleichheit nicht überprüft, aber irgendwie herausfindet, dass beide gleich sind.

Wie lautet der Algorithmus zum Überprüfen der Gleichheit äquivalenter Unicode-Zeichenfolgen in Python?

1
Informationen hier https://en.wikipedia.org/wiki/Unicode_equivalence scheint darauf hinzuweisen, dass dies kein unbedeutendes Problem ist ...... Prem vor 4 Jahren 1

0 Antworten auf die Frage