Python 外观相同的字符串,但字节表示形式不同

Python 外观相同的字符串,但字节表示形式不同,python,python-3.x,unicode,Python,Python 3.x,Unicode,上面的字符串是我键入的,而下面的字符串是从数据库中提取的 bytes('TOYOTA', 'utf-8') >> b'TOYOTA' bytes('ΤΟΥΟΤΑ', 'utf-8') >> b'\xce\xa4\xce\x9f\xce\xa5\xce\x9f\xce\xa4\xce\x91' 当我想检查它的存在时,这会导致不希望的结果 'TOYOTA' == 'ΤΟΥΟΤΑ' >> False 知道如何“修复”不正确的字符串吗?看起来这些是希腊大写字母:

上面的字符串是我键入的,而下面的字符串是从数据库中提取的

bytes('TOYOTA', 'utf-8')
>> b'TOYOTA'

bytes('ΤΟΥΟΤΑ', 'utf-8')
>> b'\xce\xa4\xce\x9f\xce\xa5\xce\x9f\xce\xa4\xce\x91'
当我想检查它的存在时,这会导致不希望的结果

'TOYOTA' == 'ΤΟΥΟΤΑ'
>> False

知道如何“修复”不正确的字符串吗?

看起来这些是希腊大写字母:

>>> import unicodedata
>>> s = 'ΤΟΥΟΤΑ'
>>> for c in s:
...     print(unicodedata.name(c))
... 
GREEK CAPITAL LETTER TAU
GREEK CAPITAL LETTER OMICRON
GREEK CAPITAL LETTER UPSILON
GREEK CAPITAL LETTER OMICRON
GREEK CAPITAL LETTER TAU
GREEK CAPITAL LETTER ALPHA
您可以尝试使用一个可用的第三方库对拉丁字母表进行音译,例如:


这是一个类似的问题:

看起来这些是希腊大写字母:

>>> import unicodedata
>>> s = 'ΤΟΥΟΤΑ'
>>> for c in s:
...     print(unicodedata.name(c))
... 
GREEK CAPITAL LETTER TAU
GREEK CAPITAL LETTER OMICRON
GREEK CAPITAL LETTER UPSILON
GREEK CAPITAL LETTER OMICRON
GREEK CAPITAL LETTER TAU
GREEK CAPITAL LETTER ALPHA
您可以尝试使用一个可用的第三方库对拉丁字母表进行音译,例如:


这是一个类似的问题:

要解决这个问题,我会将从数据库中提取的字符串生成的字节保存到一个变量中,然后覆盖所需的字节:

>>> toyota_database_fix = b'\xce\xa4\xce\x9f\xce\xa5\xce\x9f\xce\xa4\xce\x91'
>>> toyota_database_fix = b'TOYOTA'
现在解码并保存它:

>>> toyota_database_fix = toyota_database_fix.decode('UTF-8')
>>> # now toyota_database_fix.decode('UTF-8') = 'TOYOTA'
如果要检查其是否存在:

>>> 'TOYOTA' == toyota_database_fix
True

为了修复它,我将把从数据库中提取的字符串生成的字节保存到一个变量中,然后覆盖所需的字节:

>>> toyota_database_fix = b'\xce\xa4\xce\x9f\xce\xa5\xce\x9f\xce\xa4\xce\x91'
>>> toyota_database_fix = b'TOYOTA'
现在解码并保存它:

>>> toyota_database_fix = toyota_database_fix.decode('UTF-8')
>>> # now toyota_database_fix.decode('UTF-8') = 'TOYOTA'
如果要检查其是否存在:

>>> 'TOYOTA' == toyota_database_fix
True

这些字符串不同。这些看起来很相似。搜索一个i。E使用浏览器搜索,您将无法找到both@MarcinOrlowski根据字体或应用程序的不同,它们实际上看起来完全相同。在我的网络浏览器中,它们看起来完全相同,而在终端中,它们看起来完全不同。哪个是“不正确”字符串?如果数据库的实际内容是希腊文本,您肯定不想替换字母并损坏数据,对吗?所以这里唯一的问题是搜索查询<代码>丰田不是
чΥΥΑ
,无论它们看起来有多相似。这些字符串不是完全相同的字符串。这些看起来很相似。搜索一个i。E使用浏览器搜索,您将无法找到both@MarcinOrlowski根据字体或应用程序的不同,它们实际上看起来完全相同。在我的网络浏览器中,它们看起来完全相同,而在终端中,它们看起来完全不同。哪个是“不正确”字符串?如果数据库的实际内容是希腊文本,您肯定不想替换字母并损坏数据,对吗?所以这里唯一的问题是搜索查询
TOYOTA
不是
чΥΑΑ
,不管它们看起来有多相似。我只需要一个简单的存在性检查,这个解决方案就行了。现在我知道我可以检查python中每个字符的unicode名称。谢谢我只需要一个简单的存在性检查,这个解决方案就行了。现在我知道我可以检查python中每个字符的unicode名称。谢谢