Python 理解使用编码/解码去除变音符号

Python 理解使用编码/解码去除变音符号,python,decode,encode,diacritics,Python,Decode,Encode,Diacritics,我对学习如何从文本中去除变音符号很感兴趣。也就是说,我正试图更好地理解以下代码行中发生的事情,我在2017年的一篇帖子中发现了这些代码行: 导入Unicode数据 text=unicodedata。规范化'NFD',文本。编码'ascii','ignore'。解码'utf-8' 以下是我的大致理解: unicodedata。规范化“NFD”,文本将每个字符转换为其分解形式,例如,a变为、 .encode'ascii','ignore'将规范化文本转换为ascii字节字符串b'string'并忽略

我对学习如何从文本中去除变音符号很感兴趣。也就是说,我正试图更好地理解以下代码行中发生的事情,我在2017年的一篇帖子中发现了这些代码行:

导入Unicode数据

text=unicodedata。规范化'NFD',文本。编码'ascii','ignore'。解码'utf-8'

以下是我的大致理解:

unicodedata。规范化“NFD”,文本将每个字符转换为其分解形式,例如,a变为、

.encode'ascii','ignore'将规范化文本转换为ascii字节字符串b'string'并忽略任何错误


.decode'utf-8'返回从给定字节解码的字符串,但这就是我卡住的地方。为什么不使用。改为解码“ascii”?这两种编码重叠吗?

您的理解基本正确。诀窍是:编码“ascii”,“忽略”。ASCII只能表示128个字符,其中许多字符甚至无法打印。ASCII字符集当然不包含带变音符号的字符。因此,它试图强制文本进入ASCII字符集,而忽略会导致它无法表示的所有字符被默默地丢弃;去掉了所有那些分解的变音符号

你是对的,将其解码为UTF-8本身没有多大意义;将其解码为ASCII将更有意义。但是,与许多编码一样,UTF-8是ASCII的超集。任何有效的ASCII字符串也是有效的UTF-8字符串、有效的ISO-8859-1字符串或许多其他编码中的有效字符串。您可以用任何兼容的编码对其进行解码,并得到相同的结果。作者明确选择UTF-8是…有点奇怪,但技术上无关紧要