Python unicode规范化:将u'\ xb4'翻译为u'\ u0301'是否正确

new*_*ver 8 python unicode

看下面的代码片段:

>>> import unicodedata
>>> from unicodedata import normalize, name

>>> normalize('NFKD', u'\xb4')
u' \u0301'

>>> normalize('NFKD', u'a\xb4a')
u'a \u0301a'

>>> normalize('NFKC', u'a\xb4a')
u'a \u0301a'

>>> name(u'\xb4'), name(u'\u0301')
('ACUTE ACCENT', 'COMBINING ACUTE ACCENT')
Run Code Online (Sandbox Code Playgroud)

我想了解,如果行为翻译u'\xb4'u' \u0301'是正确的.为什么它将结合的重音与空间相结合?为什么它会翻译你\xb4呢?

fileformat,我们看到ACUTE ACCENT用于调用SPACING ACUTE.我想,这只是意味着光标应该移动而不是等待输入以下字符.

UPD:如果有人感兴趣,这里有一个列表,如果NFKC规范化后的unicode字符在开头有空格:http://pastebin.com/Z99r5AK9

Mar*_*ers 11

重音字符是空格和组合重音字符的组合,如Unicode标准中所指定:

>>> import unicodedata
>>> unicodedata.decomposition(u'\xb4')
'<compat> 0020 0301'
Run Code Online (Sandbox Code Playgroud)

这个\u00B4角色有一些模糊的历史,但是Unicode标准决定把它当作空白+重音,即使它经常被用作变音标记,请参阅此讨论.

您也许可以使用它\u02CA作为替代方案; 它不被视为空格,也没有指定分解.它取而代之的是一封信,因此您的里程可能会有所不同.