Cpdetector

cpdector 就是一款文档编码检测工具,可以检测 xml,html文档编码类型。是爬虫,浏览器的一款很好的辅助工具。
是基于统计学原理的,来判断文档的编码,不保证正确。文档开始都是字节流,要根据字节流得到编码类型。那么 ascii 编码占用一个字节,iso8859-1也是占用1个字节,utf-8是可变长编码占用字节不确定,gbk编码占用2个字节。那么它怎么根据字节流来推断其编码呢?因为肯定是要读取相应的字节,然后在去对比相应的码表,得到对应的字符。所以这样如果一篇文章如果都是ascii字符,那么肯定会存在误判的情况。比如是ascii编码,可能误判为utf-8,iso8859-1。但这样也不会影响结果,是可以容忍的。
测试结果也确实发现了上述现象,但可以接受。还有对中文字符编码的判断,发现不适合判读少量文本个,比如 判断 “联通” 那么就判断有误,但是 如果 连续输入 20个联通字符 却又能够正确判断是gbk编码,这确实和基于统计来判断文档编码,因为 字符少, 基于统计 这个前提就没有意义了。所以 判断字符的样本量的字符数越多应该越精确判断其编码类型。这也正体现了统计学的样本量越大,其得出的结果越精确。
因为gbk是占用2个字节的,那么它是如何判断是gbk编码呢?
如果取出其中一个字节的编码那么也可以在iso8859-1 或utf-8存在,那么怎么才能得到其正确的编码gbk呢?我觉得探测文档编码的时候会分单字节读、双字节、3字节、直到6字节(utf-8最长可用字节存储编码),如果双字节读取的结果参照gbk编码得到的字符有不是乱码的话那么就可以按照双字节来处理了。即认为是gbk编码,如果读取的双字节都没有任何意义,那么就可以尝试着用iso8859-1 或 ascii编码来读取,如果按照相应的码表转换的得到的字符也没有意义,那么最终可以按照utf-8来读取中文字符,即3字节来读取,并按照utf-8码表得到有意义的字符,即认为是utf-8编码。我认为就是一个不断筛选的过程,并最终统计得出最有可能的编码。经过测试发现及时你是ascii编码或者iso8859-1也会被识别是utf-8编码,utf-8兼容2者,所以对结果没有影响。
上面只是我的猜想,cpdector可用添加三方的detector ,比较有名的是JChardetFacade,它封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码。ParsingDetector,UnicodeDetector,ASCIIDetector.
detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的 。所以如果添加多个dector,谁先得到返回的结果飞空,就认为该编码是所得编码。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值