【发布时间】:2014-01-14 02:09:03
【问题描述】:
鉴于像u'кни́га' 这样的重音unicode 词,我需要去除锐音(@987654323@),并将重音格式更改为u'кни+га',其中'+' 表示前一个字母的锐音。
我现在做的是使用锐化符号和非锐化符号字典:
accented_list = [u'я́', u'и́', u'ы́', u'у́', u'э́', u'а́', u'е́', u'ю́', u'о́']
regular_list = [u'я', u'и', u'ы', u'у', u'э', u'а', u'е', u'ю', u'о']
accent_dict = dict(zip(accented_list, regular_list))
我想做这样的事情:
def changeAccentFormat(word):
for letter in accent_dict:
if letter in word:
its_index = word.index(letter)
word = word[:its_index + 1] + u'+' + word[its_index + 1:]
return word
但它当然不能按预期工作。我注意到这段代码:
>>> word = u'кни́га'
>>> for letter in word:
... print letter
给予
к
н
и
´
г
а
(好吧,我没想到会出现空白符号,但尽管如此)。所以我想知道,产生[u'к', u'н', u'и́', u'г', u'а'] 的最简单方法是什么?或者也许没有它有什么方法可以解决我的问题?
【问题讨论】:
-
>>> len(u'кни́га') 6Python 只会这样对待它们 -
定义“unicode 符号”。 Python 不会遍历字节,它会遍历代码点(只要您留在 BMP 内或使用 >= 3.3 的版本)。这是一个有意义的抽象,尽管并不总是你想要的。根据您是否有意在所需输出中省略了“г”上的重音,您似乎想要字素簇或删除组合字符。或许您可以描述一下您的用例,以便我们帮助您选择?
-
@delnan,急性在 'и́' 字母上,并且仍然出现在所需的输出中:) 但是我明白了,我会编辑问题
-
天啊!好吧,缩小范围,您应该研究的概念是字素簇。
-
"symbol" 来自 ASCII 思维。你想数字形吗? utf8everywhere.org各种解释
标签: python unicode python-unicode