转自:http://www.cnblogs.com/lersh/archive/2008/07/09/1238799.html
《比IE准确率更高的自动字符集检测类 UniversalCharDet 》
一是网页或服务器直接报告浏览器,这个页面用的是什么编码。比如HTTP头的content-type属性,页面的charset属性。这个比较容易实现,只要检测这些属性就能知道用的是什么编码。
二是浏览器自动猜测。这个就类似人工智能了。比如有些网页没有写charset属性,那么我们看到页面显示乱码时,就会手动去选择页面编码,发现是乱码,就再换一个,直到显示正常为止。
今天这篇文章要说的就是第二个方法,用程序实现自动猜测页面或文件使用的字符集。 具体的原理就是基于统计学的字符特征分析,统计哪些字符是最常见的字符。这个工作Mozilla有专门的文章《A composite approach to language/encoding detection》说明。 好了,具体的代码其实Mozilla已经用C++实现了,名字就叫UniversalCharDet,但是我翻遍了Internet也找不到.NET的实现类库,只有Google Code上有Java的翻译代码。没办法,自己翻译成C#的代码吧。
C#实现的源代码:http://code.google.com/p/nuniversalchardet/
PS1.顺便说一下标题,为什么叫比IE更准确,那是因为IE浏览器也自带字符集猜测功能,也有人实现了通过调用IE的接口来猜测字符集的功能类库(http://www.codeproject.com/KB/recipes/DetectEncoding.aspx),不过我试过,这个接口的准确率也不高,成功猜测几率远低于UniversalCharDet。
PS2.网上流传比较多的是Nchardet,这个是基于mozilla的老版本字符集猜测类chardet的C#实现。准确率也比较低,大致和IE的接口成功率差不多。
PS3.参考资料
juniversalchardet:http://code.google.com/p/juniversalchardet/ (java版代码在BIG5Prober和GB18030Prober类中有BUG,C#版已经修正)
原理参考: http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html
java调用例:juniversalchardet-1.0.3.jar
private String universalCharDet(byte[] contentBinary) {
String encoding = null;
// (1)
UniversalDetector detector = new UniversalDetector(null);
// (2)
detector.handleData(contentBinary, 0, contentBinary.length);
// (3)
detector.dataEnd();
// (4)
if (StringUtils.isNotEmpty(detector.getDetectedCharset())) {
encoding=detector.getDetectedCharset();
logger.info("get page encodeing by UniversalCharDet "+encoding);
}
// (5)
detector.reset();
return encoding;
}
相关推荐
3. 中文字符处理:考虑到中文字符集(GB2312、GBK、UTF-8等)的多样性,源码可能包含了中文编码的识别和转换算法,以确保正确地处理各种中文网页。 4. 文本清洗:去除HTML标签、特殊字符、无意义的空格和换行,使...
"中文字符串"在软件本地化中具有特殊性,因为中文是一种复杂的字符集,包括汉字、标点符号和组合字符。处理中文字符串时,需要考虑编码问题(如UTF-8、GBK等),以及确保在各种操作系统和设备上显示正常。此外,中文...
OCR(Optical Character Recognition,光学字符识别)技术是一种将图像中的文字转换为机器编码文本的计算机视觉技术。在本主题中,"OCR字符识别源代码"着重关注的是用于识别数字和英文字符的程序代码,这在诸如车牌...
Mozilla Firefox作为一款全球化的浏览器,其源码中的编码识别工具必定经过精心设计,能够处理各种复杂情况,确保用户无论在何种语言环境下都能正常浏览网页。因此,研究这个源码可以为开发者提供宝贵的编码处理经验...
9. **多语言识别**:除了单一语言的手写字符识别,系统可能还需要处理多种语言,这就需要更复杂的模型来处理各种字符集和书写规则。 10. **实时应用与挑战**:手写字符识别在实际应用中面临着速度、准确性、书写...
在NLP中,特殊字符集的处理是一个关键环节,因为这些字符往往对文本分析、语义理解以及信息抽取等任务产生重要影响。 特殊字符包括但不限于标点符号、数字、符号、非ASCII字符、特殊格式字符等。这些字符在文本中起...
Python支持Unicode字符集,这意味着它可以处理包括中文在内的各种语言字符。中文字符在Unicode编码中通常由两个或四个字节表示,这取决于所使用的编码方式(如UTF-8或GB2312)。 在Python中,可以使用正则表达式库`...
通过结合图像处理技术和自然语言处理技术,我们可以构建更复杂的解决方案,例如自动抽取发票信息、识别身份证号码等。 总之,Tesseract OCR为C#开发者提供了强大的文本识别能力,它不仅支持多种语言,而且具备高度...
在本实例中,"Python自动办公实例-快速提取一串字符中的中文.zip"是一个压缩包,其中包含了关于如何使用Python语言在日常办公环境中快速提取字符串中中文字符的教程。这个实例可能适合那些需要处理大量文本数据,...
命名实体识别(Named Entity Recognition, NER)是自然语言处理中的一个重要任务,它涉及到识别文本中具有特定意义的实体,如人名、地名、组织名等。在知识工程领域,NER是构建知识图谱、信息抽取和问答系统的基础。...
图像识别技术是现代信息技术的重要组成部分,它涉及到计算机视觉、机器学习和模式识别等多个...随着技术的进步,图像识别已广泛应用于人脸识别、指纹识别、字符识别等领域,极大地提升了信息处理的效率和智能化水平。
关系抽取是自然语言处理中的一个重要领域,主要涉及从文本中识别和提取实体之间的语义关系。这一过程旨在理解和解析文本中的深层结构,从而揭示出实体(如人、地点、时间等)之间的联系,这些联系构成了文本的意义...
自动识别编码:支持ANSI、EUC_JP、UTF-8、Big5等多种字符集编码的自动识别。 自动抽取新闻:无需分析来源的网页编写特点,支持自动分析来源网页,自动抽取新闻正文。 自动翻译:全自动将外文翻译成中文,从而实现...
【作品名称】:基于中文命名实体识别与线性回归的刑期预测...根据抽取出的伤情,由于一则犯罪事实中可能有多人受伤,则采用类似one-hot编码方式进行编码 之后利用传统线性回归模型,测试加权和未加权方法进行回归预测
自动识别编码:支持ANSI、EUC_JP、UTF-8、Big5等多种字符集编码的自动识别。 自动抽取新闻:无需分析来源的网页编写特点,支持自动分析来源网页,自动抽取新闻正文。 自动翻译:全自动将外文翻译成中文,从而实现...
汉字字符特征提取器是一款专为深度学习设计的工具,它主要功能是提取汉字的发音特征和字形特征,以便在机器学习模型中作为...在实际应用中,我们需要根据具体任务和数据集来调整和优化特征提取的过程,以达到最佳效果。
自动识别编码:支持ANSI、EUC_JP、UTF-8、Big5等多种字符集编码的自动识别。 自动抽取新闻:无需分析来源的网页编写特点,支持自动分析来源网页,自动抽取新闻正文。 自动翻译:全自动将外文翻译成中文,从而...
自动识别编码:支持ANSI、EUC_JP、UTF-8、Big5等多种字符集编码的自动识别。 自动抽取新闻:无需分析来源的网页编写特点,支持自动分析来源网页,自动抽取新闻正文。 自动翻译:全自动将外文翻译成中文,...