Python 将chardet输出的结果拆分为收集编码类型

Python 将chardet输出的结果拆分为收集编码类型,python,Python,我正在我的一个脚本中测试chardet。我想确定结果变量的编码类型,而chardet在这里似乎做得很好 这就是我正在做的: myvar1 现在,对于添加的相关信息:chardet是一种检测编码的尝试。它不是100%可靠,有时会出现故障。然而,这是最好的,因为可靠的编码检测是不可能的。如果chardet失败,只需为用户提供一种指定编码的方法即可 无法读取不知道特定编码类型的文本。这是不可能的,因为相同的字节序列在不同的编码上可能意味着不同的字符。换句话说,编码是不明确的chardet只是一个猜测

我正在我的一个脚本中测试chardet。我想确定结果变量的编码类型,而chardet在这里似乎做得很好

这就是我正在做的:

myvar1
现在,对于添加的相关信息:
chardet
是一种检测编码的尝试。它不是100%可靠,有时会出现故障。然而,这是最好的,因为可靠的编码检测是不可能的。如果
chardet
失败,只需为用户提供一种指定编码的方法即可

无法读取不知道特定编码类型的文本。这是不可能的,因为相同的字节序列在不同的编码上可能意味着不同的字符。换句话说,编码是不明确的
chardet
只是一个猜测。它可以而且将在野外失败。最好也是唯一可靠的方法是询问生成字符串的人首先使用了哪种编码


编辑: 对于您的场景,保持理智的唯一方法是询问生成字符串的人所使用的编码是什么。你说的

“输入是可变的,并且 不在我的控制范围之内。”

如果这是真的,那么您就无法正确读取输入。如果事先不知道文本输入使用的是哪种编码,则无法从大量字节中读取文本输入。这是不可能的。根据定义

请询问生成ByTestRing的人,让他们向您提供用于生成ByTestRing的编码,以及ByTestRing本身,以便您理解它们没有编码,bytestring只是一个字节块,您无法知道其中有哪些字符。这就像拥有一堆数据,却不知道如何解释它们

这些字节来自哪里?为什么您不能控制生成数据所使用的编码?由于您无法正确解释数据,数据提供商是否知道他们提供的数据是无用的


我将再次重复,以明确说明:如果不知道用于生成字节的编码,您就无法正确、可靠地将一组字节作为文本读取。它不可能可靠地工作。您需要与制作人达成某种协议,以便了解编码。

第二个问题:正如回溯所说,
aBuf
是一个
int
,但它需要一个字符串。你需要找出原因


嗯。。。刚刚解决了;您正在向它输入一个字节,表示为整数(
0xab
),而不是字符串(
'\xab'
)。在任何情况下,chardet都需要远远超过1个字节才能猜测编码。向任何字符集检测器输入一个字节是完全没有意义的。

Thnx。但是myvar1的输入是可变的。我不知道myvar1中每个值的具体编码类型。目前,我正在使用unicode(myvar1),但我发现它在某些类型中失败。因此,正在寻找chardet自动检测方案。@sunshine:您无法读取不知道特定编码类型的文本。这是不可能的——因为相同的字节序列可能意味着不同编码上的不同字符。换句话说,编码是不明确的
chardet
只是一个猜测。它可以也将在野外失败。最好也是唯一可靠的方法是询问生成字符串的人,首先使用的是哪种编码。好的。你能看到我上面问题中的情景并分享你的想法吗?我理解。我检查了我这边的文件。有两种文件类型—1种纯文本和2种xml。我做了一个cat-v file>newfile,然后在脚本中使用了这个文件。脚本仍然会因相同的错误而中断。我阅读了关于使用BOM处理类似问题的文章。你知道吗?我正在考虑添加一个if{myvar1='0xab',然后解码(myvar1,('UTF-8'))操作1或操作2}。。。你认为.0xab是171。len(aBuf)正在尝试获取一个数字的长度。那么失败了。。?这不是chardet的一个bug吗?:)那么我如何识别单字节输入的编码类型呢?当使用unicode(myvar1)时,它不能说UnicodeDecodeError:“ascii”编解码器无法解码XXXY位置的字节0xab。你不能。每个字节都有多种可能性。为什么您认为您需要识别单个字节的编码???将整个“myvar1”输入字符,而不是
unicode()
失败的单个字节!![结束&结束,我的TZ已经过了午夜]
print myvar2['encoding']