Python中的编码检测库

5 投票
2 回答
3348 浏览
提问于 2025-04-15 19:33

这和我在这里问的问题有点关系。

我处理了大量的文本(主要是HTML和XML格式),这些文本是通过HTTP获取的。我在找一个Python库,能够根据不同的策略智能地检测编码,并用最佳的字符编码将文本转换为Unicode。

我发现chardet在自动检测方面做得非常好。不过,自动检测所有内容是个问题,因为这样会很慢,而且不符合所有标准。根据chardet常见问题,我不想违反标准。

在同一个常见问题中,这里有我想要查找编码的地方:

  • HTTP Content-type头中的charset参数。
  • HTML文档中网页里的<meta http-equiv="content-type">元素。
  • XML文档中XML前言里的编码属性。
  • 最后的手段是自动检测字符编码。

基本上,我希望能够查看所有这些地方,并且自动处理冲突的信息。

有没有这样的库,还是我需要自己写一个?

2 个回答

10

BeautifulSoupUnicodeDammit,它又使用了 chardet

chardet 本身在判断文本编码方面非常有用,但正如你所说,它的速度比较慢。UnicodeDammitchardet 的基础上增加了一些额外的功能,特别是它可以查找 XML 中编码标签明确指定的编码。

至于 HTTP 的 Content-type 头部,我觉得你需要自己读取这个信息,以提取 charset 参数,然后把它传递给 UnicodeDammitfromEncoding 参数。

关于解决编码冲突的问题,UnicodeDammit 会优先考虑那些明确声明的编码(前提是这些编码没有产生错误)。具体的细节可以查看文档。

3

BeautifulSoup(一个用来解析HTML的工具)里面有一个叫做UnicodeDammit的类,专门用来处理字符编码的问题。你可以去看看,看看这个功能是否符合你的需求。

撰写回答