【问题标题】:Identical looking string but different bytes representation外观相同但字节表示不同的字符串
【发布时间】:2020-08-28 23:32:02
【问题描述】:

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

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

bytes('ΤΟΥΟΤΑ', 'utf-8')
>> b'\xce\xa4\xce\x9f\xce\xa5\xce\x9f\xce\xa4\xce\x91'

当我想检查它是否存在时,这会导致不良结果

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

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

【问题讨论】:

  • 这些不是相同的字符串。这些只是看起来相似。搜索一个 i。 e.使用浏览器搜索,你不会找到两者
  • @MarcinOrlowski 根据字体或应用程序,它们实际上看起来相同。在我的网络浏览器中它们看起来相同,而在终端中它们看起来完全不同。
  • 哪个是“不正确”的字符串?如果数据库的实际内容是希腊文本,那么您肯定不想替换字母并破坏数据,对吧?所以这里唯一的问题是搜索查询。 TOYOTA 不是 ΤΟΥΟΤΑ 不管它们看起来多么相似。

标签: python python-3.x unicode


【解决方案1】:

这些似乎是希腊大写字母:

>>> 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

您可以尝试使用可用的第三方库之一进行拉丁字母的音译,例如:

这是一个类似的问题:How can I create a string in english letters from another language word?

【讨论】:

  • 我只需要一个简单的存在检查,这个解决方案就可以了。现在我知道我可以检查 python 中每个字符的 unicode 名称。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 2021-07-15
  • 2016-09-25
  • 2016-01-08
  • 2015-01-31
  • 2012-09-06
相关资源
最近更新 更多