2015-07-02 37 views
2

为什么我不能在代码中交换unicode字符?为什么我不能在python中交换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) 

OUTPUT:idzie WAZwąskądróżką

预期输出:idzie WAZ waska drozka

+0

你到底想干什么? –

+0

您可以在代码中看到将另一个字符换成另一个更改±至a,ż至z和ó至o(波兰语特定字母) – Gunnm

+0

@Gunnm提供预期输出 – The6thSense

回答

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' 

正如你可以在列表解析蟒之内看到2部分\xc4\x85分裂它。所以得到的是骑您可以通过utf8 encocding第一解码文本:

>>> [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'] 
+0

有效。非常感谢您的帮助,如何正确解码和编码命令的工作? – Gunnm

+1

@Gunnm欢迎您。让我解释! ;) – Kasramvd

2

你的字符串应该被存储为unicode字符串。

更改这两行,它应该工作:

character_swap = {u'ą': 'a', u'ż': 'z', u'ó': 'o'} 

text = u'idzie wąż wąską dróżką' 
相关问题