gpt4 book ai didi

python - 相同的单词但不同的 unicode 字符

转载 作者:可可西里 更新时间:2023-11-01 09:58:45 26 4
gpt4 key购买 nike

我在 Windows 上使用 Python 构建了一个关于越南餐馆的问答应用程序。要编写越南字符,我需要使用 Unicode。
首先,我从使用 HTML charset=utf-8 的 TripAdvisor 网站克隆数据并构建我的 Mongo 数据库。 TripAdvisor 中一个名为“đà nẵng”的城市有一个代码:

>>> print repr("đà nẵng")     # from tripadvisor website 
>>> '\xc4\x91a\xcc\x80 n\xc4\x83\xcc\x83ng'

但是,当我从 Firefox 的地址栏中查询时,城市“đà nẵng”有不同的代码:

>>> print repr("đà nẵng")   # Firefox's address bar
>>> '\xc4\x91\xc3\xa0 n\xe1\xba\xb5ng'

这就是为什么我在我的数据库中找不到那个城市的原因。我尝试在notepad++上写下这个城市名称,结果和使用Firefox的地址栏一样

>>> print repr("đà nẵng")   # notepad++ using 'Encoding UTF-8'
>>> '\xc4\x91\xc3\xa0 n\xe1\xba\xb5ng'

有没有办法在两种类型的代码之间进行转换?
或者在这种情况下,有什么方法可以将城市名称“đà nẵng”与不同的代码相匹配吗?

最佳答案

您遇到的问题是,unicode 允许多种方式来组成相同的符号。 Python 模块 unicodedata 提供了一个函数 normalize,它允许您将 unicode 表示形式转换为固定的 form 。 (例如 NFC)

from unicodedata import normalize

S1 = b'\xc4\x83\xcc\x83'.decode('UTF-8')
S2 = b'\xe1\xba\xb5'.decode('UTF-8')

print(normalize('NFC', S1).encode('UTF-8'))
print(normalize('NFC', S2).encode('UTF-8'))

在您的示例中,tripadvisor 以 NFD 形式显示,而记事本使用 NFC。

关于python - 相同的单词但不同的 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41975601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com