2
votes

Pourquoi deux mêmes chaînes sont-elles inégales?

J'essaye de rechercher une chaîne dans une liste. Ils se ressemblent exactement mais pourquoi ne sont-ils pas égaux?

b'li\xc3\xaa\xcc\xa3u'
b'li\xe1\xbb\x87u'
False

Sortie actuelle:

l = ['liệu',]
a = bytes(l[0],encoding='utf-8')
print(a)

i = 'liệu'
print(bytes(i,encoding='utf-8'))

print(i==l[0])

Comment pouvons-nous le rendre vrai ?


9 commentaires

Les cordes ne semblent pas les mêmes.


ils sont tous les deux «liệu», n'est-ce pas?


Non, ils ne sont pas le même code utf. Copiez et collez les deux e dans leur propre forme d'octet et vous verrez qu'ils sont différents


J'exécute votre code sur ma machine à l'aide de Jupyter Notebook, mais donne True


oh c'est vraiment étrange, j'utilise un texte sublime. Y a-t-il une sorte de package qui doit être installé?


Le codage est-il connu?


Après avoir inspecté le site Web html, je conclus que l'encodage est utf-8. Veuillez consulter le site Web: lamerfashion.com/products/l62f18h016-s4400 . La chaîne appropriée se trouve dans la zone de texte sous l'image du produit.


@LuluVo, Si vous avez besoin de les comparer, pourquoi ne pas prendre celui qui fonctionne réellement et l'utiliser à la place? J'ai pu utiliser a == a avec succès. Pourquoi utiliser celui qui ne fonctionne pas?


@Netwave oui c'est une façon de le faire ^^. Mais je suis toujours assez frustré en raison de la nature mystérieuse de cette erreur


3 Réponses :


0
votes

Comme vous pouvez le voir avec la représentation en octets, ce sont deux chaînes différentes:

>>> for l1, l2 in zip(a, b):
...     print(l1 == l2)
... 
True
True
False
False

Elles diffèrent après la troisième lettre:

>>> a = 'liệu'
>>> b = 'liệu'
>>> a == a
True
>>> b == b
True
>>> a == b
False

Cela ne signifie pas que le u est différent, mais bien sûr que le e l'est.


3 commentaires

'ệ' == 'ệ' Faux


savez-vous pourquoi ils pourraient être différents? À mes yeux normaux, je ne peux discerner aucune différence. J'ai obtenu la liste par web scraping, l'autre chaîne que j'ai tapée en python pour la comparer avec la liste.


@LuluVo, probablement celui que vous avez mis au rebut a été écrit dans un encodage différent.



0
votes
>>> 'ệ'=='ệ'
False
Why like that? because they are different characters but just look the same, you can check the two characters in the unicode table, u will find they have different Unicode.I had the same issue like you before, you can visit my issue page

3 commentaires

comment avez-vous résolu le problème? J'ai obtenu la chaîne à partir du web scraping, je dois donc y comparer ma propre chaîne saisie


une manière simple, même si ce sont des personnages différents, nous pourrions remplacer l'un d'entre eux par le bon.


si vous avez beaucoup de caractères comme ci-dessus votre description, je vous conseille de créer un dictionnaire de caractères pour les mapper.



1
votes

Copiez-collez le ÃªÌ £ du premier "liÃªÌ £ u" dans le second "liÃªÌ £ u" ou vice versa. Cela devrait garantir que les deux sont les répliques exactes l'une de l'autre. Cela devrait certainement vous donner ce résultat:

b'li\xe1\xbb\x87u'
b'li\xe1\xbb\x87u'
True

J'espère que cela vous aidera!


1 commentaires

@Lulu Vo - La solution la plus simple à votre problème est d'utiliser simplement le même pour les deux l et i ce qui donne True < / code> en copiant-collant l'un des dans l'autre liệu .