10

我正在尝试学习 Python,所以我想我会先尝试查询 IMDB 以对照 IMDB 检查我的电影收藏;进展顺利

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

例如我有电影Brüno

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

我假设编码使用不同的标准,但我无法弄清楚我需要做什么

4

1 回答 1

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”,或Normalization Form Canonical Composition,尽可能地组合字符。

相比之下,另一种主要形式Normalization Form Canonical Decomposition或“NFD”将生成您的版本:

>>> unicodedata.normalize("NFD", "Brüno").encode("utf-8")
b'Bru\xcc\x88no'
于 2019-03-22T14:25:47.040 回答