使用通用编码检测器(chardet)在Python文本文件中检测字符

使用通用编码检测器(chardet)在Python文本文件中检测字符,python,character-encoding,Python,Character Encoding,我试图使用Python中的通用编码检测器(chardet)来检测文本文件(“infle”)中最可能的字符编码,并在进一步处理中使用它 虽然chardet主要是为检测网页的字符编码而设计的,但我发现它在单个文本文件中使用了大量的字符编码 但是,我无法确定如何告诉脚本将最可能的字符编码设置为变量“charenc”(在整个脚本中使用多次) 我的代码基于上述示例和chardet自身的组合,如下所示: import chardet rawdata=open(infile,"r").read() c

我试图使用Python中的通用编码检测器(chardet)来检测文本文件(“infle”)中最可能的字符编码,并在进一步处理中使用它

虽然chardet主要是为检测网页的字符编码而设计的,但我发现它在单个文本文件中使用了大量的字符编码

但是,我无法确定如何告诉脚本将最可能的字符编码设置为变量“charenc”(在整个脚本中使用多次)

我的代码基于上述示例和chardet自身的组合,如下所示:

import chardet    
rawdata=open(infile,"r").read()
chardet.detect(rawdata)
在脚本继续运行以下操作(以及一些类似的用途)时,需要进行字符检测:

任何帮助都将不胜感激。

chardet.detect()
返回一个字典,其中提供编码作为与键
'encoding'
关联的值。所以你可以这样做:

import chardet    
rawdata = open(infile, 'rb').read()
result = chardet.detect(rawdata)
charenc = result['encoding']

不清楚文本字符串和/或字节字符串是否应该与模块一起工作,但如果您有文本字符串,则不需要对其运行字符检测,因此您可能应该传递字节字符串。因此,调用
open()
时会使用二进制模式标志(
b
)。但是
chardet.detect()
也可以使用文本字符串,这取决于您使用的Python版本和库的版本,也就是说,如果您确实省略了
b
,您可能会发现它仍然可以工作,即使您在技术上犯了一些错误。

谢谢!我以为这会很简单!正是我需要的。出于好奇,是否有某种方法让它返回多个结果,以便您可以看到,比如说,3个最高置信水平的猜测?@Endophage我不确定,我自己也没有太多使用它。Python 3.6在试图打开UTF-8文件时抛出了
TypeError:bytes或bytearray类型的预期对象,get:
。用
“rb”
而不是
“r”
打开解决了这个问题。@JohnLemberger啊,说得好,我已经解决了这个问题。我相信在过去,当Python对文本字符串和字节字符串之间的区别不那么挑剔时,这种方法是有效的。
import chardet    
rawdata = open(infile, 'rb').read()
result = chardet.detect(rawdata)
charenc = result['encoding']