在Python中检测字符集并转换为utf-8?

在Python中检测字符集并转换为utf-8?,python,utf-8,python-2.x,Python,Utf 8,Python 2.x,有没有通用的方法来检测字符串字符集?我使用IPTC标签,没有已知编码。我需要检测它,然后将它们更改为utf-8 有人可以帮忙吗?如果你想使用编码检测器,那就有点晚了,但还有另一个解决方案:尝试使用 例如: import icu def convert_encoding(data, new_coding='UTF-8'): coding = icu.CharsetDetector(data).detect().getName() if new_coding.upper() != c

有没有通用的方法来检测字符串字符集?我使用IPTC标签,没有已知编码。我需要检测它,然后将它们更改为utf-8


有人可以帮忙吗?

如果你想使用编码检测器,那就有点晚了,但还有另一个解决方案:尝试使用

例如:

import icu
def convert_encoding(data, new_coding='UTF-8'):
    coding = icu.CharsetDetector(data).detect().getName()
    if new_coding.upper() != coding.upper():
        data = unicode(data, coding).encode(new_coding)
    return data

还有另一个模块叫做

据说它比chardet快


请注意,它需要

如果要使用cchardet执行此操作,可以使用此功能

import cchardet
def convert_encoding(data, new_coding = 'UTF-8'):
  encoding = cchardet.detect(data)['encoding']

  if new_coding.upper() != encoding.upper():
    data = data.decode(encoding, data).encode(new_coding)

  return data

它不起作用,我在问之前试过了。有些字符串没有编码,但不是真的。标记是以某种方式编码的,因为在1个web门户上可以识别它们。+1:chardet似乎是当前进行编码检测的最佳方法之一@robos85:不可能完成完美的编码检测:。我已经开发了一种更成功的检测编码的方法,基于对语言的了解。它得到了正确的8位编码。最后。@tchrist:想与大家分享吗?看看你对@Ignacio的评论,我想请你在你的问题中粘贴几个“无”字串的例子,这样我们就可以玩转它们,了解问题所在。如果您还可以像您提到的门户网站上那样粘贴正确的解码版本,这将非常有用。基于icu的pyicu,有时会错过检测某些编码:@coanor:在某些情况下,任何编码检测器都会失败,因为无法准确确定所有测试的编码。我尝试了多种编码格式(base64,…)。结果总是ascii码