为什么这些看起来相同的字符串在代码上有所不同?

时间:2019-07-22 23:54:06

标签: python string unicode utf-8 compare

我正在使用Unicode文本使用Python创建一些文件,并将内容保存在sqlite3 DB中。稍后,我获取这些文件并进行一些更改。问题在于,即使它们看起来相同,Python也不认为这两个字符串是相同的。

这是一个例子:

Str1 : "Copa América 2019"
Str2 : "Copa América 2019"

虽然两个字符串看起来完全相同,但是程序不会将它们视为相同。

我也在其他语言(韩语,日语等)中看到了相同的行为,并在这里选择了法语示例,因为它对我来说更容易阅读。韩文/日文我通过外观将字符匹配。

我还在线进行了比较(例如https://www.quickdiff.com/),并发现了相同的结果...因此它不是特定于Python的,而是其他一些问题。

我可以对字符串执行什么操作,以便代码将这两个字符串视为相同?

尝试将显式转换分别转换为str / utf-8编码,但无济于事。

a = "Copa América 2019"
b = "Copa América 2019"
if a == b:
    print 'y'

type(a)
    <type 'str'>
type(b)
    <type 'str'>

我希望这些字符串的字符串比较结果为True。

1 个答案:

答案 0 :(得分:1)

@Blorgbeard答案的完整演示。

import unicodedata

a = "é"
b = "é"

print(len(a)) # 1
print(len(b)) # 2

print(len(unicodedata.normalize("NFC", a))) # 1
print(len(unicodedata.normalize("NFC", b))) # 1

print(len(unicodedata.normalize("NFD", a))) # 2
print(len(unicodedata.normalize("NFD", b))) # 2

此问题可能被标记为重复,以防万一。