在 Python 中使用 unicode 字符时的不同编码

Different encoding when using unicode character in Python

当遇到组合 unicode 而不是内置 unicode 时,我在 Python 中遇到问题。这是重现代码:

# encoding=utf8

a = ["Địa"]
b = ["Địa"]

print(a)  # ['\xc4\x90i\xcc\xa3a']
print(b)  # ['\xc4\x90\xe1\xbb\x8ba']

print("Địa" in a)  # False
print("Địa" in b)  # True

如何convert/normalize将它们放入同一个编码器?

您可以使用 unicodedata.normalize():

# encoding=utf8
import unicodedata
a = ["Địa"]
b = ["Địa"]

print("Địa" in [unicodedata.normalize('NFC', i) for i in a])
print("Địa" in [unicodedata.normalize('NFC', i) for i in b])

这输出:

True
True