猜测文本/字符串编码的方式

      如果给定一个文本/字符串,要获得其编码方式,除了BOM位判断法(很多文件没有BOM标志,有也不一定就正确),就只能通过猜测的方式来获得了。
      不管是Linux下的iconv或者windows下的编码转换API都可以知道转换失败的。所以可以随便截一段话,不知道是utf-16,utf-8,gbk没关系,就假设它是,然后转换到另一种编码,如果成功转换了,可能就是它了,如果失败, 那就可能不对。当然如果截取的部分比较小或者不具代表性(比如截到“12345”,哪知道是utf8还是gbk),可能多种编码都能通过检验。如果文本不 是很规范,也可能全都失败。
      如果不考虑计算代价的话,可以把整个文本抓去转换,转换中错误最小的编码就可以认为是该文本的编码了。如果觉得体位还可以再复杂些,可以加入统计语言模型。如果文本内容是有意义的,长度超过10个字,我相信正确率可以超过99.9%,但如果太短就不太好说了。
      另外江湖传言IBM有个开源项目:ICU,这里面有猜测编码的API。
======================================================================
      后记,有不明真相的围观群众建议从前往后用语言模型进行判断,直到某种编码明显胜出。这样做应该准确率高而且速度也很快。如果只用一维的语言模型(估计够用),体积也很小,只有几百k。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值