本文转自网络

最近在给OpenCC做图形界面,遇到一个问题:OpenCC默认只能转换utf-8文本,其他编码像GB18030,BIG5只能转换成utf-8以后,才能用OpenCC转换。这个问题说大不大,说小也不小。我完全可以增加一个选项,在打开的时候让用户选择文本编码,然后再转换就行了,但这却给用户非常糟糕的体验,因为很多非专业用户根本不知道什么是文本编码,更别说辨别了。GB18030/BIG5硬要用utf-8打开的话,肯定会遇到乱码。由于Windows默认是GB18030/BIG5编码,一般情况下文本会被保存成默认编码,这样更大大增加了用户遇到乱码的概率。为了提高体验,我计划实现文本编码的自动检测。

最早接触到编码是从做网站开始的,记得如果忘了在head中显式地向浏览器指定编码,就经常会出现乱码,但乱码也并不总是出现,这是怎么回事呢?浏览器还是有自动识别的能力的。发现Firefox浏览器中有一个编码选项,里面有「自动检测」,使用它绝大多数时候都能正确识别。

事实上纯文本的编码检测是一个非常复杂的问题,甚至理论上根本不可能实现。确切地说,「检测」应该叫「探测」或者「推测」才更恰当。自动编码探测的实现原理主要是统计学的方法,每个编码会有一定的特征,首先检测特征是否符合,再使用常用的匹配,类似于蒙特卡罗法。具体方法可以参考Mozilla。

mozilla在很多年前就做了一个非常优秀的编码检测工具,叫chardet,后来有发布了算法更加优秀的universalchardet,用于Firefox的自动编码识别。我想,这么出名的一个工具,应该肯定已经有不少人在用了。有意思的是,我在网上找到了chardet和universalchardet的各种移植:

  • python-chardet Python 移植
  • ruby-rchardet Ruby 移植
  • juniversalchardet Java 移植 universalchardet
  • jchardet Java 移植 chardet
  • nuniversalchardet C# 移植 universalchardet
  • nchardet C# 移植 chardet

惟一没有的,竟然是C/C++的接口封装。debian更是收录了python-chardet和ruby-rchardet,却没有libchardet或者libuniversalchardet。莫非没有C/C++的应用在使用chardet吗?用强大的Google代码搜索,发现的确有,但几乎都是把chardet的代码内嵌到了项目中,耦合十分紧密。更有直接调用python-chardet的,实现不够纯净。

总觉不该是这样,但经过反复确认,真的没有一个独立的universalchardet的C函数库封装。还是自己动手好了,我从mozilla上面取下来了代码,做了一点点补丁,写了一个接口和命令行界面,取名uchardet,大功告成。测试了一些GB18030和UTF8的文本,感觉准确率非常高,而且速度很快。但是当我试图识别几个字节的短文本的时候,却出现了识别错误,开始以为是我的错,后来发现我用Firefox直接打开,也是无法识别的,而且错误识别的编码一样。看来是上游的问题,应该是算法本身的缺陷吧。想想看,毕竟文本越短歧义的可能性越强。不过既然能达到和Firefox同样的水平,一般应用也就够了。

项目主页在Google code上:

http://code.google.com/p/uchardet/

代码在github上:

https://github.com/BYVoid/uchardet

我为什么用universalchardet?其实编码自动识别的解决方案不止一个,有icu提供的解决方案,IE也有API,还有已经在很多Linux发行版中的enca。我之所以用universalchardet,是因为它是最合适的。IE的API不能跨平台,icu实现太庞大,enca是GPL(注意不是LGPL),使用它意味著我也要让我的所有源码使用GPL,而不是更加开放的Apache。universalchardet是MPL的,和LGPL差不多宽松,使用它是没有问题的。我非常不喜欢以GPL发布的函数库,这给开发者的限制太大了。

编码自动识别工具 uchardet相关推荐

  1. 代码整理工具_程序员软件:程序员有哪些常用又好用的编码小工具?

    最近,有很多朋友让我帮忙整理一下程序员有哪些常用又好用的编码小工具.今天,小编就整理一下哦,希望大家一起学习,一起进步! 1. Notepad++ Notepad++中文版是一款非常有特色的编辑器,是 ...

  2. Windows SharePoint Services 3.0编码开发工具和技巧(Part 1 of 2)

    转:http://blog.csdn.net/mattwin/article/details/2074984 WSSv3 Technical Articles_Windows SharePoint S ...

  3. Qt文件编码转换工具(三) Qt界面设计

    目录 下载链接 上一节为C++判断文件编码 本节为Qt界面设计 下载链接 Realase打包版本下载: Qt文本转化工具 realase版本 https://download.csdn.net/dow ...

  4. Qt文件编码转换工具(二) C++判断文件编码

    目录 下载链接 上一节 如何判断文件编码 下一节 下载链接 Realase打包版本下载: Qt文本转化工具 realase版本 https://download.csdn.net/download/q ...

  5. WSSv3 Technical Articles_Windows SharePoint Services 3.0编码开发工具和技巧(Part 2 of 2)

    WSSv3 Technical Articles_Windows SharePoint Services 3.0编码开发工具和技巧(Part 2 of 2) 摘要:研究Windows SharePoi ...

  6. mac上编码转换工具_25个用于高效编码的Mac工具

    mac上编码转换工具 by freeCodeCamp 通过freeCodeCamp 25个用于高效编码的Mac工具 (25 Mac Tools for Productive Coding) 1.现代浏 ...

  7. 一种字符编码猜测工具的实现方法

    2019独角兽企业重金招聘Python工程师标准>>> 摘要 自从进入计算机时代后,人们创造了许多编码,来表示各国的语言文字.这些编码从一开始设计时,就没有考虑到要和其它编码兼容,它 ...

  8. 解决中文乱码问题:使用编码转换工具

    解决中文乱码问题:使用编码转换工具 问题 比如我们在上传项目到github的时候,可能会遇到一种情况:我们的eclipse和Myeclipse的默认编码格式一般都是GBK,可能一开始我们没有设置UTF ...

  9. CTF---basecrack---Base编码分析工具安装详解

    CTF-basecrack-Base编码分析工具安装详解 准备工具:Python环境(最新版) 安装详情: 1)首先下载工具,访问网站或者私信我进行工具获取,网站地址:https://github.c ...

最新文章

  1. Java HashMap和Hashtable的区别
  2. windows下svn server迁移
  3. 智能机器人及其应用ppt课件_智能工业机器人应用再获成功!
  4. boost::intrusive_ref_counter相关的测试程序
  5. 制作本地 CentOS-7-x86_64-Everything-2009.iso对应的源
  6. Stack Overflow 监控系统内部架构初探
  7. 钱荒下银行理财收益率角逐:邮储银行垫底
  8. 王爽 汇编语言第三版 课程设计 1
  9. 小程序剖析 | 小程序中Page的数据设置
  10. bzoj1449 [JSOI2009]球队收益
  11. 思博伦安全专家预测2017年民用和军用全球导航应用面临的更大风险
  12. [转载]Android系统上(mv不可用)cp命令的替代方法
  13. hdu 1054 Strategic Game 树形dp基础模板
  14. 商城后台管理系统Vue+Vue-Router+Element-UI+Axios+Echarts 黑马程序员视频笔记
  15. 计算机基础到底是哪些基础?为什么很重要!
  16. 庞果答题:亿阳信通:不可表示的数 的一个人见解(8-13第二次更新。)
  17. S@Kura的PHP进阶之路(三)
  18. 华三HCL模拟器添加虚拟网卡连接外网、VMware虚拟机、实体机方法
  19. AutoCAD二次开发规则重定义
  20. 英伟达最新公布的眼球追踪技术

热门文章

  1. 龙光城的洋房和惠州的花园
  2. 《Java核心技术 卷Ⅰ》读书笔记一
  3. 校园二手物品交易网站毕业设计
  4. mysql into loadfile_mysql load_file()和 into outfile
  5. python编程用什么软件?
  6. 大猫老师小课堂搜索引擎专题:ElasticSearch 的使用方法
  7. 欧文6 oracle aqua 测评,欧文6实战测评!详细说说
  8. MySQL第一讲 一遍让你彻底掌握MVCC多版本并发控制机制原理
  9. 程序员的六大赚钱副业!
  10. 王者荣耀游戏简介-1