解码编码字符串列表

时间:2013-10-01 19:15:41

标签: python unicode python-2.x

我正在处理一个发布数据集,在从xml文件中提取数据后,我得到了一个这样的列表:

['21-10-2013', ['título do artigo'],['álvaro', 'joão', 'márcio'],['teste', 'operação','manobras']]

正如你所看到的那些单词是葡萄牙语。为了转换为unicode,我尝试了Kumar McMillan的代码,我收到了farmdev.com/talks/unicode/。这是代码:

>>> def to_unicode_or_bust(obj, encoding='utf-8'):
...     if isinstance(obj, basestring):
...         if not isinstance(obj, unicode):
...             obj = unicode(obj, encoding)
...     return obj
... 

我在一个简单的字符串中尝试了代码:     ab =“trabalhar com aimaginação”

输出:

>>> cd=to_unicode_or_bust(ab)
u'trabalhar com a imagina\xe7\xe3o'

如果我发出打印命令:

>>> print cd
trabalhar com a imaginação

好的,这似乎没事。但是我如何申请清单呢? 天真试试:

>>> lista2 = to_unicode_or_bust(lista1)
>>> print lista2
['21-10-2013', ['t\xc3\xadtulo do artigo'], ['\xc3\xa1lvaro', 'jo\xc3\xa3o', 'm\xc3\xa1rcio'], ['teste', 'opera\xc3\xa7\xc3\xa3o', 'manobras']]

我知道,这可能是一个新手问题,但是为了在lista2中获得正确的葡萄牙语字符,我该怎么做?

2 个答案:

答案 0 :(得分:2)

你拥有的功能很好,但它一次只能在一个字符串上运行 - 如果它传递的是非unicode字符串以外的东西,它只会返回它。你传递的是list,它会在没有变化的情况下回复给你。

这个递归函数应该遍历每一位并用转换后的字符串重新组合。

def convert_all(all, convert=to_unicode_or_bust):
    if isinstance(all, tuple):
        return tuple(convert_all(piece, convert) for piece in all)
    elif isinstance(all, list):
        return [convert_all(piece, convert) for piece in all]
    return convert(all)

请注意,当您打印list时,列表中的字符串将显示带有\x--\u----格式的Unicode字符,但各个字符串将正确打印。< / p>

答案 1 :(得分:-1)

如果你有字符串本身,你可以使用以下语法:

mystring = u'سلام'

如果你没有你的'python忽略unicode base。

但是打印命令:你应该使用:

print str.decode('utf-8')

你的变量:

mystring = unicode(myvar)