2015-07-02 35 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ą' 
相關問題