【问题标题】:Detect charset and convert to utf-8 in Python? [duplicate]在 Python 中检测字符集并转换为 utf-8? [复制]
【发布时间】:2011-10-06 03:57:39
【问题描述】:

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

有人可以帮忙吗?

【问题讨论】:

  • 查看您对@Ignacio 的评论,我会邀请您将几个“无”字符串示例粘贴到您的问题中,以便我们可以与它们一起玩并了解问题所在。如果您也可以像在您提到的门户上那样粘贴正确的解码版本,那将会很有帮助。

标签: python utf-8 python-2.x


【解决方案1】:

你想使用chardet,一个编码检测器

【讨论】:

  • 不行,我先试了一下再问这里。有些字符串得到 None 编码,但事实并非如此。标签以某种方式被编码,因为它们在 1 个门户网站上被识别。
  • +1:chardet 似乎是当前进行编码检测的最佳方法之一。 @robos85:不可能做到完美的编码检测:stackoverflow.com/questions/436220/….
  • 基于对语言的了解,我开发了一种更成功的检测编码的方法。它获得了正确的 8 位编码。最后。
  • @tchrist: 愿意分享吗?
【解决方案2】:

有点晚了,不过还有一个解决办法:尝试使用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

【讨论】:

【解决方案3】:

如果你想用 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

【讨论】:

  • 我尝试了很多编码格式 (base64, ... ) 。结果总是 ascii
【解决方案4】:

还有另一个模块叫cchardet

据说比chardet快。

注意它需要Cython

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    相关资源
    最近更新 更多