繁体   English   中英

为什么我不能在python中交换unicode字符

[英]why I can't swap unicode characters in 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)

输出:idziewążwąskądróżką

预期的输出:idzie waz waska drozka

您需要先对文本进行编码,然后再对字符进行解码:

>>> 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 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']

您的字符串应存储为unicode字符串。

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

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

text = u'idzie wąż wąską dróżką'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM