Python中unicodedata.normalize('NFKD')处理Ä后长度为2的原因咨询
关于unicodedata.normalize('NFKD')处理'Ä'后长度为2的原因
核心原因在于NFKD是兼容性分解模式,它会把预组合的Unicode字符拆分成「基础字符+独立的组合附加符号」:
- 'Ä'本身是一个预组合的Unicode字符(编码U+00C4),用
normalize('NFKD', 'Ä')处理后,会被分解成两个独立的Unicode码点:基础字符'A'(U+0041)和组合分音符¨(U+0308)。 - 这两个码点是完全独立的字符单元,所以字符串的长度是2。
至于打印出来看起来像单个'A',是因为终端或打印工具会自动把基础字符和组合符号渲染成视觉上的单个字符,但底层存储的是两个独立的字符。
对应你的代码细节:
result[0] == 'A'为True,因为第一个字符确实是基础字符'A'result == 'A'为False,因为前者是两个字符的序列,后者是单个预组合字符
如果想把分解后的字符重新组合成单个长度的字符,可以使用NFC模式(组合形式):
from unicodedata import normalize result = normalize('NFKD', 'Ä') combined = normalize('NFC', result) print(len(combined)) # 1 print(combined == 'Ä') # True
内容的提问来源于stack exchange,提问作者buhtz
相关产品推荐
相关产品推荐

