Python 检查编码并转换为Unicode

Python 检查编码并转换为Unicode,python,unicode,encoding,Python,Unicode,Encoding,我有一个不同字符串的列表。有时它们是cp1251、ASCII或其他格式。我需要将它们转换为Unicode,因为我遇到了一个错误,尤其是当我试图将这些数据转储到JSON时 我怎样才能做到这一点呢?如果您知道编码,应该很容易: unicode_string = encoded_string.decode(encoding) 如果您不知道编码,可能很难检测到它,但这取决于您期望的编码和语言。如果您知道编码,应该很容易: unicode_string = encoded_string.decode(e

我有一个不同字符串的列表。有时它们是cp1251、ASCII或其他格式。我需要将它们转换为Unicode,因为我遇到了一个错误,尤其是当我试图将这些数据转储到JSON时


我怎样才能做到这一点呢?

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

unicode_string = encoded_string.decode(encoding)

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

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

unicode_string = encoded_string.decode(encoding)
如果您不知道编码,可能很难检测它,但这取决于您期望的编码和语言。

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

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
警告:像chardet这样的解决方案只能作为最后手段使用,例如,在修复由于过去的错误而损坏的数据集时。它太脆弱,无法在生产代码中使用;相反,正如@bames53在对该答案的评论中指出的,您应该首先修复损坏数据的代码。

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

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

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

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

>>> s = "Some string"
>>> s = unicode(s)
>>> type(s)
<type 'unicode'>
或者使用列表理解

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

阅读官方的Python

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

>>> s = "Some string"
>>> s = unicode(s)
>>> type(s)
<type 'unicode'>
或者使用列表理解

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

阅读官方的Python

你对编码有什么指示吗?猜测编码是可能的,但不精确。你能举几个输入字符串的例子吗?另外,您使用的是Python2.x还是3.x?ASCII是cp1251的一个子集,几乎每隔一次编码,所以这是问题的一部分,不是问题。您如何知道某些字符串在cp1251中?如果你得到的是俄罗斯的数据,其他的可能是koi8r。或者它可能是UTF-8。提供例子。另外,请告诉我们如何获得具有不同编码的字符串列表。您是否有任何编码指示?猜测编码是可能的,但不精确。你能举几个输入字符串的例子吗?另外,您使用的是Python2.x还是3.x?ASCII是cp1251的一个子集,几乎每隔一次编码,所以这是问题的一部分,不是问题。您如何知道某些字符串在cp1251中?如果你得到的是俄罗斯的数据,其他的可能是koi8r。或者它可能是UTF-8。提供例子。另外,请告诉我们如何获得不同编码的字符串列表。Thx!这是我见过的最好的解决这个问题的方法!猜测编码不是一个好的解决方案,如果可能的话应该避免。@bames53我对OP的问题的理解是猜测是必要的。没错,OP目前定义了这个问题;他对字符串的编码一无所知。只要他不改变这一点,那么猜测是必要的,但真正的解决办法是让他后退一步,解决真正的问题,即他拥有的字符串不知道其编码@用户8289您不知道在OP的情况下这是不可能的。无论出于何种原因,许多程序员对编码这一主题一无所知,他们根本没有意识到,尽管猜测似乎有点隐藏了问题,但如果他们不创建损坏的数据,他们实际上可以可靠地修复它。是的,未知编码的字符串首先是损坏的。因为他们可能不知道该问什么,所以每当提到猜测的话题时,最好讨论一下。谢谢!这是我见过的最好的解决这个问题的方法!猜测编码不是一个好的解决方案,如果可能的话应该避免。@bames53我对OP的问题的理解是猜测是必要的。没错,OP目前定义了这个问题;他对字符串的编码一无所知。只要他不改变这一点,那么猜测是必要的,但真正的解决办法是让他后退一步,解决真正的问题,即他拥有的字符串不知道其编码@用户8289您不知道在OP的情况下这是不可能的。无论出于何种原因,许多程序员对编码这一主题一无所知,只是没有意识到,尽管猜测似乎有点隐藏了问题,但如果他们不创建损坏的数据,他们实际上可以可靠地修复它。是的,未知编码中的字符串在fir中损坏 圣广场。因为他们可能不知道该问什么,所以每当提到猜测的话题时,讨论一下这个问题是个好主意。