1

我正在研究一个发布数据集,在从 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 a imaginaçã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 中获得正确的葡萄牙语字符?

4

2 回答 2

2

您拥有的函数很好,但它一次只能处理一个字符串 - 如果它传递的不是非 unicode 字符串,它只会返回它。你传递它 alist并且它会原封不动地返回给你。

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

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)

请注意,当您打印 a 时,列表中的字符串将以 a或格式list显示 Unicode 字符,但各个字符串将正确打印。\x--\u----

于 2013-10-01T19:24:09.923 回答
-1

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

mystring = u'سلام'

如果你没有 u'' python 忽略 unicode 库。

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

print str.decode('utf-8')

你的变量:

mystring = unicode(myvar)
于 2013-10-01T19:21:29.210 回答