1

我有一个包含不同字符串的列表。有时他们在cp1251ASCII或其他地方。我需要处理它们(转换为 Unicode),因为我遇到了一个错误(UncicodeDecodeError),尤其是当我试图将这些数据转储到 JSON 时。

我怎样才能做到这一点?

4

3 回答 3

4

您可以使用chardet来检测字符串的编码,因此将它们的列表转换为 unicode(在 Python 2.x 中)的一种方法是:

import chardet

def unicodify(seq, min_confidence=0.5):
    result = []
    for text in seq:
        guess = chardet.detect(text)
        if guess["confidence"] < min_confidence:
            # chardet isn't confident enough in its guess, so:
            raise UnicodeDecodeError
        decoded = text.decode(guess["encoding"])
        result.append(decoded)
    return result

...你会这样使用:

>>> unicodify(["¿qué?", "什么?", "what?"])
[u'\xbfqu\xe9?', u'\u4ec0\u4e48\uff1f', u'what?']

CAVEAT:像 chardet 这样的解决方案只能作为最后的手段使用(例如,在修复因过去错误而损坏的数据集时)。在生产代码中依赖它太脆弱了;相反,正如@bames53 在对此答案的评论中指出的那样,您应该首先修复损坏数据的代码。

于 2013-02-13T15:48:58.897 回答
0

如果您知道编码,那应该很容易:

unicode_string = encoded_string.decode(encoding)

如果您不知道编码,则可能很难检测到它,但这取决于您期望的编码和语言。

于 2013-02-13T15:33:00.617 回答
0

尝试使用 unicode 函数将字符串转换为内置的 unicode 类型。

>>> s = "Some string"
>>> s = unicode(s)
>>> type(s)
<type 'unicode'>

对于您的问题,请尝试创建一个新的 unicode 字符串列表。

new = []
for item in myList:
    new.append(unicode(item))

或使用列表理解

new = [unicode(item) for item in myList]

阅读官方 Python Unicode HOWTO

于 2013-02-13T15:49:21.117 回答