为什么我不能在代码中交换unicode字符?
# -*- coding: utf-8 -*-
character_swap = {'ą': 'a', 'ż': 'z', 'ó': 'o'}
text = 'idzie wąż wąską dróżką'
print text
print ''.join(character_swap.get(ch, ch) for ch in text)
输出:idziewążwąskądróżką
预期输出:idzie waz waska drozka
答案 0 :(得分:3)
您需要先对文本进行编码,然后再次对字符进行解码:
>>> print ''.join(character_swap.get(ch.encode('utf8'), ch) for ch in text.decode('utf8'))
idzie waz waska drozka
因为python列表的理解并没有默认编码你的unicode,实际上你正在做的是:
>>> [i for i in text]
['i', 'd', 'z', 'i', 'e', ' ', 'w', '\xc4', '\x85', '\xc5', '\xbc', ' ', 'w', '\xc4', '\x85', 's', 'k', '\xc4', '\x85', ' ', 'd', 'r', '\xc3', '\xb3', '\xc5', '\xbc', 'k', '\xc4', '\x85']
对于像ą
这样的角色,我们有:
>>> 'ą'
'\xc4\x85'
正如你在列表中看到的那样,理解python将它分成2部分\xc4
和\x85
。因此,为了获得它,您可以通过utf8
包围来解码您的文字:
>>> [i for i in text.decode('utf8')]
[u'i', u'd', u'z', u'i', u'e', u' ', u'w', u'\u0105', u'\u017c', u' ', u'w', u'\u0105', u's', u'k', u'\u0105', u' ', u'd', u'r', u'\xf3', u'\u017c', u'k', u'\u0105']
答案 1 :(得分:2)
您的字符串应存储为unicode字符串。
更改这两行,它应该有效:
character_swap = {u'ą': 'a', u'ż': 'z', u'ó': 'o'}
text = u'idzie wąż wąską dróżką'