J'aurais utilisé PyICU et sa classe Collator. Mais tout d'abord, vous devez penser à quel niveau de Algorithme de collationnement d'Unicode vous voulez que l'égalité se produise.
#!/usr/bin/python
# -*- coding: utf-8 -*-
from icu import Collator
coll = Collator.createInstance()
coll.setStrength(Collator.IDENTICAL)
a = u''
b = u''
print repr(a)
print repr(b)
print ('%s == %s : %s' % (a, b, coll.equals(a,b)))
a = u''
b = u''
print ('%s == %s : %s' % (a, b, coll.equals(a,b)))
coll.setStrength(Collator.PRIMARY)
print ('%s == %s : %s' % (a, b, coll.equals(a,b)))
a = u'hello'
b = u'HELLO'
coll.setStrength(Collator.PRIMARY)
print ('%s == %s : %s' % (a, b, coll.equals(a,b)))
coll.setStrength(Collator.TERTIARY)
print ('%s == %s : %s' % (a, b, coll.equals(a,b)))
Ces sorties :
u'\u4eba\u53e3\u3058\u3093\u3053\u3046\u306b\u81be\u7099\u304b\u3044\u3057\u3083\u3059\u308b'
u'\u4eba\u53e3\u3058\u3093\u3053\u3046\u306b\u81be\uf9fb\u304b\u3044\u3057\u3083\u3059\u308b'
== : True
== : False
== : True
hello == HELLO : True
hello == HELLO : False
3 votes
Il serait vraiment utile de formater correctement ce document, y compris les guillemets fermants sur vos chaînes de caractères, etc., afin que nous puissions simplement le copier-coller et le tester.
6 votes
Mais je vais supposer que le problème est la normalisation Unicode
2 votes
Pourquoi est-ce que \u7099 la même chose que \uf9fb ?
4 votes
@ThorbjørnRavnAndersen U+F9FB est un Idéogrammes de compatibilité du CJK qui se décompose en U+7099
0 votes
Il est intéressant de noter que dans un JS REPL les cordes sont égales.
2 votes
Je dirais plutôt des "points de code" différents que des "octets" différents.