我正在尝试学习Python,所以我想我将从尝试查询IMDB开始对照IMDB检查我的电影收藏集;一切顺利
我要坚持的是如何处理名称中的特殊字符,以及如何将名称编码为URL会尊重的名称。
例如,我有电影Brüno
如果我使用urllib.parse.quote
编码字符串,则会得到-Bru%CC%88no
,这意味着当我使用OMDBAPI查询IMDB时,它找不到电影。如果我通过OMDBAPI网站进行搜索,则它们会将名称编码为Br%C3%BCno
,并且此搜索有效。
我假设编码使用的是不同的标准,但是我无法确定我需要做什么
答案 0 :(得分:8)
它使用相同的编码,但使用不同的规范化。
>>> import unicodedata
>>> "Brüno".encode("utf-8")
b'Bru\xcc\x88no'
>>> unicodedata.normalize("NFC", "Brüno").encode("utf-8")
b'Br\xc3\xbcno'
某些字素(您看到的是一个“字符”),尤其是带有变音符号的字素可以由不同的字符组成。 “ü”可以是带有组合偏音符的“ u”,也可以是字符“ü”本身(组合形式)。字母和变音符号的组合并不是全部存在,但常用的字母(变音符号是通用语言)却存在。
Unicode归一化将构成字素的所有字符转换为组合或单独的字符。规范化方法“ NFC”或规范化规范规范化组合尽可能地组合字符。
相比之下,另一种主要形式规范化形式规范分解或“ NFD”将生成您的版本:
>>> unicodedata.normalize("NFD", "Brüno").encode("utf-8")
b'Bru\xcc\x88no'