我有一个包含不同字符串的列表。有时他们在cp1251
,ASCII
或其他地方。我需要处理它们(转换为 Unicode),因为我遇到了一个错误(UncicodeDecodeError),尤其是当我试图将这些数据转储到 JSON 时。
我怎样才能做到这一点?
您可以使用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 在对此答案的评论中指出的那样,您应该首先修复损坏数据的代码。
如果您知道编码,那应该很容易:
unicode_string = encoded_string.decode(encoding)
如果您不知道编码,则可能很难检测到它,但这取决于您期望的编码和语言。
尝试使用 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。