首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将chardet输出的结果拆分为收集编码类型

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

Stack Overflow用户
提问于 2010-10-25 12:53:40
回答 2查看 343关注 0票数 0

我正在我的脚本中测试chardet。我想识别结果变量的编码类型,chardet在这里做得很好。

这就是我要做的:

myvar1 <--从其他函数中获取其值

myvar2 = chardet.detect( myvar1 ) <-以检测myvar1的编码类型

现在,当我执行print myvar2时,会收到输出:

{‘置信度’:1.0,‘编码’:'ascii'}

问题1:有人能给出如何只收集编码值部分的指针吗,即ascii。

编辑:场景如下:

我使用unicode(myvar1)将所有输入写入unicode。但是,一旦myvar1获得像0xab这样的值,unicode(myvar1)就会出现错误:

UnicodeDecodeError:'ascii‘编解码器不能在xxx位置解码字节0 0xab :序数不在范围内(128个)

因此,我想:

  1. 首先识别myvar1中输入的编码类型,
  2. 采用myvar2中的编码类型,
  3. 用这种编码(myvar2)来解码输入(myvar1),使用
  4. 将其传递给unicode。

G 221

输入的输入是可变的,不属于我的控制范围。

我相信还有其他方法可以做到这一点,但我对此并不陌生。我愿意尝试。

请给我任何指针。

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-25 13:09:48

代码语言:javascript
复制
print myvar2['encoding']

现在,对于添加的相关信息:chardet是一种检测编码的尝试。它不是百分之百可靠,有时也会失败。然而,这是最好的,因为可靠的编码检测是不可能的。只要为用户提供一种方法,以便在chardet失败时为他们指定编码。

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

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

“输入的输入是可变的,而不是在我的控制中。

如果是这样的话,那么就不能正确地读取输入。您的无法在不事先知道它使用哪种编码的情况下从一堆字节读取文本输入。不可能的。从定义上来说。

请询问生成字节串的人向您提供用于生成字节串的编码,以及字节串本身,这样您就可以理解它们了。没有编码的,字节字符串只是字节块(),您不知道其中有哪些字符。这就像拥有一堆数据,但却不知道如何解释它们。

这些字节从何而来?为什么不能控制使用哪种编码来生成数据呢?数据提供者是否知道他们提供的数据是无用的,因为您不能正确地解释它?

我将再重复一遍,以明确说明:您的无法正确、可靠地将一堆字节作为文本读取,而不知道用于生成字节的编码。它不可能可靠地工作。你需要和制作者达成某种协议,这样你就知道编码了。

票数 1
EN

Stack Overflow用户

发布于 2010-10-25 13:17:28

第二个问题:正如跟踪显示的那样,aBuf是一个int,但它需要一个字符串。你得找出原因。

呃..。刚刚解决了这个问题;您要给它一个字节,表示为一个整数(0xab),而不是一个字符串('\xab')。无论如何,chardet需要更多的1字节才能猜到编码。输入任何一个字节的字符集检测器是完全没有意义的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4014706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档