我正在使用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。
答案 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
此问题可能被标记为重复,以防万一。