编码特殊字符以传递给 URL

Encoding special characters for passing to a URL

我正在尝试学习 Python,所以我想我应该先尝试查询 IMDB 以根据 IMDB 检查我的电影 collection;进展顺利

我坚持的是如何处理名称中的特殊字符,并将名称编码为 URL 会尊重的内容。

例如我有电影Brüno

如果我使用 urllib.parse.quote 对字符串进行编码,我会得到 - Bru%CC%88no 这意味着当我使用 OMDBAPI 查询 IMDB 时,它找不到电影。如果我通过 OMDBAPI 站点进行搜索,他们会将名称编码为 Br%C3%BCno 并且此搜索有效。

我假设编码使用的是不同的标准,但我不知道我需要做什么

它使用相同的编码,但使用不同的规范化。

>>> import unicodedata
>>> "Brüno".encode("utf-8")
b'Bru\xcc\x88no'
>>> unicodedata.normalize("NFC", "Brüno").encode("utf-8")
b'Br\xc3\xbcno'

一些字素(你认为是一个 "character" 的东西),尤其是那些带有变音符号的字素可以由不同的字符组成。 “ü”可以是带有组合分音符的 "u",也可以是字符“ü”本身(组合形式)。并非所有字母和变音符号的组合都存在组合形式,但它们适用于常用组合(=那些存在于通用语言中的组合)。

Unicode 规范化将构成字素的所有字符转换为组合字符或单独字符。归一化方法"NFC",或归一化形式规范组合,尽可能组合字符。

相比之下,另一种主要形式,规范化形式规范分解,或"NFD"将产生你的版本:

>>> unicodedata.normalize("NFD", "Brüno").encode("utf-8")
b'Bru\xcc\x88no'