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

本文探讨了在给定文本时如何自动识别其编码方式,包括使用BOM位判断法、猜测法和ICU开源项目提供的API。通过截取文本片段尝试转换为不同编码,成功转换者即为文本编码。特别提到了ICU项目中包含的用于猜测编码的实用功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值