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

rob*_*s85 34 python utf-8 python-2.x

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

有人可以帮忙吗?

Ign*_*ams 37

您想要使用chardet编码检测器

  • @tchrist:小心分享? (21认同)
  • 它不起作用,我在问这里之前就把它搞砸了.有些字符串得到无编码,但事实并非如此.标签以某种方式编码,因为在1个门户网站上它们被识别. (2认同)
  • 基于对语言的了解,我已经开发出一种更为成功的检测编码的方法。它正确地获得了8位编码。最后。 (2认同)

小智 17

这有点晚了,但还有另一个解决方案:尝试使用pyicu.

一个例子:

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
Run Code Online (Sandbox Code Playgroud)

  • @coanor:*任何*编码检测器在某些情况下都会失败,因为无法准确确定所有测试的编码 (6认同)

tea*_*uit 14

如果您想使用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
Run Code Online (Sandbox Code Playgroud)


lai*_*e9m 5

还有另一个模块叫cchardet

据说比chardet快。

请注意,它需要Cython