Cpdetector编码识别

概述

浏览器在打开一个网页时,首要任务是判断网页的编码格式,然后采用合适的编码进行解析;我们常用的文本编辑器在打开文档时同样需要判断文档的编码进行相应的解析。这涉及到的技术就是编码甄别,下面我们介绍一款比较好用的Java 库。

http://sourceforge.net/projects/cpdetector/这个地址可以下载到。

实例

不做过多赘述了,直接贴出实例代码。

package com.coder4j.main.cpdetector;

import info.monitorenter.cpdetector.io.ASCIIDetector;
import info.monitorenter.cpdetector.io.ByteOrderMarkDetector;
import info.monitorenter.cpdetector.io.CodepageDetectorProxy;
import info.monitorenter.cpdetector.io.JChardetFacade;
import info.monitorenter.cpdetector.io.ParsingDetector;
import info.monitorenter.cpdetector.io.UnicodeDetector;

import java.net.MalformedURLException;
import java.net.URL;

/**
 * 导入如下jar<br>
 * cpdetector_1.0.10.jar,antlr-2.7.4.jar,chardet-1.0.jar
*
 * @author Chinaxiang
 * @date 2015-10-11
*
*/
public class UseCpdetector {

/**
 * 获取URL的编码
*
 * @param url
 * @return
*/
 public static String getUrlEncode(URL url) {
/*
 * detector是探测器,它把探测任务交给具体的探测实现类的实例完成。
 * cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、
 * JChardetFacade、ASCIIDetector、UnicodeDetector。
 * detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的
 * 字符集编码。使用需要用到三个第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar
 * cpDetector是基于统计学原理的,不保证完全正确。
*/
 CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
/*
 * ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于
 * 指示是否显示探测过程的详细信息,为false不显示。
*/
 detector.add(new ParsingDetector(false));
 detector.add(new ByteOrderMarkDetector());
/*
 * JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码
 * 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以
 * 再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
*
 * 用到antlr.jar、chardet.jar
*/
detector.add(JChardetFacade.getInstance());
 // ASCIIDetector用于ASCII编码测定
detector.add(ASCIIDetector.getInstance());
 // UnicodeDetector用于Unicode家族编码的测定
detector.add(UnicodeDetector.getInstance());

 java.nio.charset.Charset charset = null;
 try {
 charset = detector.detectCodepage(url);
 } catch (Exception ex) {
ex.printStackTrace();
}
 if (charset != null) {
 return charset.name();
}
 return null;
}

 public static void main(String[] args) {
 try {
 URL url = new URL("http://www.baidu.com");
 String encode = getUrlEncode(url);
 System.out.println(encode);// UTF-8
 } catch (MalformedURLException e) {
e.printStackTrace();
}
}

}

文件的路径也可以转为URL,所以对文件编码的判断你应该会了。

时间: 2024-10-06 18:39:10

Cpdetector编码识别的相关文章

作品2:资源管理器EX(智能编码识别和智能格式识别)

续http://www.cnblogs.com/qingjun1991/p/4971689.html txt文件打开是乱码,那是因为软件没有正确的识别编码 有时候会看到jpg图片像gif图片一样会动,那是因为它只是后缀名是jpg,实际上是gif格式 像这些情况有很多... 像jpg.png.gif.bmp.rar.zip.mp3.mid...这些非文本的文件大多都会在文件的前几个字节标明文件的真实格式,所以只要判断文件的前几个字节就行了 像txt.html.cs.java.css.js.xml.

Python+Requests编码识别Bug

Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,更友好,更易用. Requests 使用的是 urllib3,因此继承了它的所有特性.Requests 支持 HTTP 连接保持和连接池,支持使用 cookie 保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码.现代.国际化.人性化. 最近在使用Requests的过程中发现一个问题,就是抓去某些中文网页的时候,出现乱码,打印encodin

转 :Vim文件编码识别与乱码处理

Vim文件编码识别与乱码处理 在 Vim 中,有四个与编码有关的选项,它们是:fileencodings.fileencoding.encoding 和 termencoding.在实际使用中,任何一个选项出现错误,都会导致出现乱码.因此,每一个 Vim 用户都应该明确这四个选项的含义.下面,我们详细介绍一下这四个选项的含义和作用. 1 encoding www.2cto.com encoding 是 Vim 内部使用的字符编码方式.当我们设置了 encoding 之后,Vim 内部所有的 bu

Text文档编码识别方法

在做文档读取的时候,时常碰到编码格式不正确的问题,而要怎么样正确识别文档的编码格式,成了很多程序员的一块心病,今天我就要试着治好这块心病,这段代码的浓缩来自上千万文档的数据分析所得,可靠率极其高. 应朋友要求,需要帮他做一个文章操作工具,既然想操作,就有文件的读取和修改,本来花费几个小时信心满满把程序交给朋友的时候,朋友突然来了句,很多文章打开出现乱码的情况,我哩个去,像是晴天霹雳深深的击在我的心窝里,我突然想到了文件编码问题,而这个问题,我曾经无数次的尝试,最终都以失败而告终,每次尝试,只不过

VIN码识别/车架号识别/车辆唯一编码识别/车辆信息识别提取

对于有车一族的朋友来说,日常接触比较多的是车牌.行驶证.驾驶证,而知道VIN码/车架号码的比较少. 其实,对于车辆来说,VIN码/车架号码非常重要,它就像人的身份证一样,VIN码/车架号码是车辆唯一的身份证明. VIN码/车架号码由17位字母和数字混合而成,从车辆VIN码/车架号码可以解析出非常多的信息,如车辆的生产厂家.年代.车型.车身型式及代码.发动机代码及组装地点等. 正是由于它的重要作用,在许多地方都可以看到VIN码/车架号码的存在.如车辆前风挡玻璃.发动机铭牌.行驶证.机动车合格证.机

c# 文本编码识别

完美区分UTF-8,与UTF8 without BOM以及其他编码 最少4个byte 1 public class TextEncodingDetect 2 { 3 #region Fields 4 5 private readonly byte[] utf16LEBOM = { 0xFF, 0xFE }; 6 private readonly byte[] utf16BEBOM = { 0xFE, 0xFF }; 7 private readonly byte[] utf8BOM = { 0x

解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG

解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG [email protected] http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-6-6 方法一: 出处:http://blog.csdn.net/leonzhouwei/article/details/8447643 直接用 Excel 打开 UTF-8 编码的 CSV 文件会导致汉字部分出现乱码. 原因是 Excel 以 ANSI 格式打开,不会做编码识别. 打开 UTF-8 编

一.编码的转换

一.  编码的转换和Python的基本算法 计算机内部的编码识别机制是Unicode,而我们一般编程使用的编码识别机制是UTF-8的,Windows的内部编码机制是Gbk的,所以在编写程序如果出现对象不能识别,出现乱码时,需要做的是将对象进行转换. 如:Unicode可以解码成GBK和UTF-8,自然GBK和UTF-8也可以编码成Unicode. 在Python2.7中如果需要转换可以这样写: temp_Unicode = temp.decode('utf-8')  temp_gbk = tem

php自动获取字符串编码函数mb_detect_encoding(转)

使用 mb_detect_encoding() 函数来判断字符串是什么编码的. 当在php中使用mb_detect_encoding函数进行编码识别时,很多人都碰到过识别编码有误的问题,例如对与GB2312和UTF- 8,或者UTF-8和GBK(这里主要是对于cp936的判断),网上说是由于字符短是,mb_detect_encoding会出现误判. 例如: $encode = mb_detect_encoding($keytitle, array("ASCII",'UTF-8′,&qu