Python unicode规范化: is it correct to translate u'\xb 4' to u' \u0301'

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

我试图了解将 u'\xb4' 转换为 u'\u0301' 的行为是否正确。为什么它用空格填充组合的尖音符?为什么它会翻译 u\xb4

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

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

最佳答案

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

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

\u00B4 字符的历史有点模棱两可,但 Unicode 标准已决定将其视为空格 + 重音符号,尽管它经常被用作变音符号,参见 this discussion .

你或许可以使用 \u02CA作为备选;它不被视为空格,也没有指定分解。它被限定为一封信,因此您的里程数可能会有所不同。

关于Python unicode规范化: is it correct to translate u'\xb 4' to u' \u0301',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954852/

相关文章:

c - Unicode 转义序列与十六进制值

java - UnknownHostException Android utf-8 编码 URL

python - 模块未找到错误 : No module named 'sklearn.cross_validation' ??如何修复它?

Python CSV 将一列中的数据转置为行

python - Nose 测试 - 文件上传

perl - 在 Perl 中打印 UTF8?

java - 如果我从文件中读取,如何将 ASCII(Unicode Escaped)中的字符串转换为 Unicode(UTF-8)?

Python3 : matplotlib. pyplot.plot_date() 日期标签溢出

python - xvfb 在 ubuntu 11.04 中运行错误

html - 获取所有主要货币的 Html 实体