import info.monitorenter.cpdetector.io.ASCIIDetector;
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.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.nio.charset.Charset;
/**
* <p>
* 本类用来探测字符的编码集,关返回其名称
* </p>
*
* @ * @vision 1.0
*/
public class Detector {
/*------------------------------------------------------------------------
detectorProxy是探测器,它把探测任务交给具体的探测实现类的实例完成。
cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法
加进来,如ParsingDetector、 JChardetFacade、ASCIIDetector、UnicodeDetector。
detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的
字符集编码。
--------------------------------------------------------------------------*/
private static CodepageDetectorProxy detectorProxy;
static {
detectorProxy = CodepageDetectorProxy.getInstance();
/*-------------------------------------------------------------------------
ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于
指示是否显示探测过程的详细信息,为false不显示。
---------------------------------------------------------------------------*/
detectorProxy.add(new ParsingDetector(false));
/*--------------------------------------------------------------------------
JChardetFacade封装了由mozilla1组织提供的JChardet,它可以完成大多数文件的编码
测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以
再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
---------------------------------------------------------------------------*/
detectorProxy.add(JChardetFacade.getInstance());
// ASCIIDetector用于ASCII编码测定
detectorProxy.add(ASCIIDetector.getInstance());
// UnicodeDetector用于unicode1家族编码的测定
detectorProxy.add(UnicodeDetector.getInstance());
}
public static synchronized String getEncodingType(String content)
throws IllegalArgumentException, IOException {
ByteArrayInputStream stream = new ByteArrayInputStream(content
.getBytes());
return Detector.getEncodingType(stream, content.length());
}
public static synchronized String getEncodingType(File file)
throws MalformedURLException, IOException {
Charset charset = detectorProxy.detectCodepage(file.toURL());
if (charset != null) {
return charset.name();
} else
return "未知";
}
public static synchronized String getEncodingType(InputStream inputStream,
int length) throws IllegalArgumentException, IOException {
Charset charset = detectorProxy.detectCodepage(inputStream, length);
if (charset != null) {
return charset.name();
} else
return "未知";
}
}
分享到:
相关推荐
Java作为一种广泛使用的编程语言,提供了多种方式来判断文件或文本流的编码。以下是对标题和描述中所述知识点的详细解释: 1. **文件编码的概念**:文件编码指的是在文件中存储字符的方式。常见的文件编码包括ASCII...
总的来说,Java中判断文件或文本流编码的方法主要包括直接读取文件头字节进行比较和使用第三方库进行复杂检测。前者适用于有限的编码格式,后者则提供了更全面的解决方案,适用于各种场景,尤其是处理用户上传或不可...
本文将探讨如何使用Java进行文件编码格式的识别,主要介绍两种方法:一种是简单的UTF-8判断,另一种是使用开源库cpdetector。 首先,对于简单的UTF-8编码格式判断,我们可以直接读取文件的前三个字节来确定。UTF-8...
### Java程序判断文件编码的类型 #### 知识点概览 本文档旨在教导读者如何通过Java编程语言来判断文件...通过以上方法,我们可以有效地判断文件的编码类型,并据此进行相应的编码转换操作,以确保文本数据的正确处理。
如果没有发现'/0',则可以假设它是ASCII文本文件,但这并不能完全排除某些含有特殊编码(如UTF-8)的文本文件,因为这些编码可能会包含0字节,但仍然属于文本文件范畴。 另外,还可以使用更复杂的方法来判断,比如...
Recognize类判定指定文本文件为UTF-8还是GBK编码格式。
下面将详细阐述文件编码、判定方法以及chardet库的相关知识点。 文件编码是用来表示文本字符的二进制表示方式,常见的有ASCII、ISO-8859-1、GB2312、GBK、Big5、UTF-8、UTF-16等。每种编码都有其特定的字符集和编码...
例如,在给定一段文本的情况下,如果使用等长的ASCII编码或固定长度的编码,将无法达到最优的编码效率。哈夫曼编码通过分析字符的出现频率来构造编码表,使得出现频率高的字符拥有较短的编码,从而整体上减少所需的...
想到如下特征来识别汉字: 1. 如果第1位是0就不需要判断的,一定是ASCII字符。... 如果第1位是1开头的,第2位是0开头的,一定是GB编码。 3. 如果第1位是非1110开头的,则一定是GB编码。 4. 多做几个汉字判断。
这些文本信息通常以ASCII码形式嵌入到视频流中,便于后期编辑或查看元数据。 ###### 1.2.9 图像后处理 为了改善解码后的图像质量,XVId提供了一系列后处理技术,包括去块效应滤波、边缘增强等,这些技术有助于提高...
该软件的要求是建立一个文本文件 A,统计该文件中各字符频率,使用 Huffman 编码将该文件翻译成 Huffman 编码文件 B,然后将 Huffman 编码文件译码成文件 C,并对文件 A 与 C 进行比较。 算法思想描述 ------------...
One-Hot编码是将离散的特征转换为数值特征的技术,常用于文本特征提取和机器学习模型中。其原理是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。 One-...
哈夫曼树(Huffman Tree),也称为最优二叉树,是一种特殊的二叉树结构,...构建哈夫曼树的过程涉及到带权路径长度的计算以及最小堆的使用,是数据结构和算法领域中的重要概念,广泛应用于文本压缩、图像处理等领域。
示例函数getLength通过正则表达式替换了所有非ASCII字符(即Unicode编码范围在0x00到0xff之外的字符),假设这些字符是中文或其他双字节字符,替换后计算剩余字符串的长度,从而近似得出实际的字符长度。 具体实现...
【Seq2Seq自编码器模型】是深度学习领域中一种重要的序列到序列(Sequence-to-Sequence)学习模型,常用于自然语言处理任务如机器翻译、文本摘要和语音识别。该模型由编码器(Encoder)和解码器(Decoder)两部分...
本文将深入解析由给定文件中的代码片段实现的无符号整数表达式的判定方法,并对其工作原理、设计思路以及潜在的应用场景进行详尽的解释和分析。 #### 代码结构与功能解析 ##### 类定义与初始化 代码首先定义了一个...
encodeURIComponent 方法 将文本字符串编码为合法的通用资源标识符 (URI)组件。 Enumerator 对象 提供集合中的项的枚举。 相等运算符(==) 比较两个表达式,看是否相等。 Error 对象 包含在运行 JScript 代码时...