繁体   English   中英

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

[英]Python unicode normalization: is it correct to translate u'\xb4' to u' \u0301'

看下面的代码片段:

>>> 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')

我试图理解将u'\\xb4'u' \́'是否正确。 为什么它将结合的重音与空间相结合? 为什么要翻译u \\xb4呢?

fileformat,我们看到ACUTE ACCENT曾被称为SPACING ACUTE 我想,这只是意味着光标应该移动而不是等待输入以下字符。

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

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

>>> import unicodedata
>>> unicodedata.decomposition(u'\xb4')
'<compat> 0020 0301'

字符有一些模糊的历史,但Unicode标准决定将其视为空格+重音,即使它经常被用作变音标记,请参阅此讨论

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

看一下Unicode Collat​​ion Algorithm文档。 特别要注意的是

兼容性标准化(NFKC)将独立重音折叠为空格+组合重音的组合。

在NFKD中,重音字符以“分割”方式存储:首先是要重音的字符,然后是组合重音: u' \́'

在NFKC中,重音字符以“组合”方式存储:有一个专用的Unicode代码点: u'\\xb4' ,它是u'\´'简写。

它们都代表着单独的口音,可以看作是对空间角色的重音。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM