/*这是一个sourceforge项目,能够判断指定文本或流的字符集*/
/*下面是这个库的简单封装*/
package me.jor.util;
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.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.concurrent.atomic.AtomicInteger;
public class CodeDetectUtil {
private static CodepageDetectorProxy codeDetector;
private static AtomicInteger threads;
/**初始化*/
public static void initCodeDetector(){
if(threads==null){
synchronized(CodeDetectUtil.class){
if(threads==null){
threads=new AtomicInteger(1);
codeDetector=CodepageDetectorProxy.getInstance();
codeDetector.add(new ParsingDetector(false));//根据xml文件头判断xml字符集
codeDetector.add(JChardetFacade.getInstance());//通用库判断字符集
codeDetector.add(UnicodeDetector.getInstance());//判断是否unicode
codeDetector.add(new ByteOrderMarkDetector());//根据字节顺序判断字符集
}else{
threads.incrementAndGet();
}
}
}else{
threads.incrementAndGet();
}
}
/**判断结束要反初始化*/
public static void endCodeDetector(){
if(threads.get()>0){
threads.decrementAndGet();
}
if(threads.get()<=0){
synchronized(CodeDetectUtil.class){
if(threads.get()<=0){
codeDetector=null;
threads=null;
}
}
}
}
/**判断指定文件的字符集*/
public static String detectCharset (File file) throws MalformedURLException, IOException{
return codeDetector.detectCodepage(file.toURI().toURL()).name();
}
}
分享到:
相关推荐
java.io.File f = new java.io.File("待判定的文本文件名"); try { java.io.InputStream ios = new java.io.FileInputStream(f); byte[] b = new byte[3]; ios.read(b); ios.close(); if (b[0] == -17 && b[1] ...
本文将深入探讨如何在Java中进行中文字符的判断和计数,这主要基于Java的Unicode编码特性以及字符集的理解。 首先,我们需要理解Java中的字符类型`char`。在Java中,一个`char`类型的变量可以存储一个Unicode字符,...
### Java判断字符串是否包含汉字的方法 在开发过程中,有时我们需要判断一个字符串是否包含汉字,并根据判断的结果执行不同的逻辑。这通常出现在需要处理多语言输入的情况下,例如用户输入验证、文本分析等场景。...
这个范围涵盖了汉字的大部分常用字符集,包括简体和繁体中文。因此,可以通过这个编码范围来编写正则表达式,用以识别和处理中文字符。 #### 三、Java 正则表达式API简介 在 Java 中,主要通过 `java.util.regex` ...
如果很多时候我们没有约定好文件格式,我们就难以读取文件内容,此时,我们就需要一个工具...返回探测到的字符集编码。可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于 指示是否显示探测过程的详细信息
Java分割文本字符串的方法 在Java编程中,文本字符串的分割是非常常见的操作,特别是在数据库字段长度限制的情况下,需要对大文本数据进行截串存取。下面我们将详细介绍Java分割文本字符串的方法,并提供一个实用的...
Java字符集是Java编程语言中处理字符编码的基础概念,它对于理解如何在程序中正确地存储、处理和传输文本至关重要。在Java中,字符集主要指的是Unicode字符集,特别是其子集UTF-8,它是Java默认使用的字符编码。Java...
Java自动识别文件字符编码工具类 参考博客 https://blog.csdn.net/superbeyone/article/details/103036914 使用方式: String encode = EncodingDetect.getFileEncode(geoJsonFile); log.info("系统检测到文件[ {}...
SimHash是一种高效的近似近邻搜索算法,通过将文本转化为哈希值并计算这些值之间的汉明距离,来快速判断文本的相似度。这种方法对于大规模数据集尤其适用,因为它能在保持较高准确性的前提下,大大减少计算成本。 ...
`chardet`库是基于Java的字符集检测工具,它可以分析字节序列并猜测其对应的字符编码。要使用`chardet`,你需要先将其导入到项目中。在Maven项目中,可以在pom.xml文件中添加如下依赖: ```xml <groupId>...
在Java中判断字符串是否含有乱码是一个常见的问题,特别是在处理网络传输数据或文本文件导入导出时。本文将介绍通过实例代码如何判断一个字符串是否含有乱码,并通过编写的Java方法来实现此功能。 首先,我们需要...
本文将详细介绍如何使用Java来识别和处理文件的字符集,主要关注如何通过代码示例判断文件是采用UTF-8、GBK还是其他字符集。 首先,我们可以看到提供的代码片段中定义了一个名为`getCharset`的方法,该方法接收一个...
特别是在多语言环境中,我们需要能够判断字符串中是否包含特定的字符集,比如中文字符。由于中文字符在Unicode编码中具有特定的编码范围,我们可以利用这一点来判断字符串中是否包含中文。 首先,了解Unicode编码...
### Java判断文件编码的方法 在Java开发中,经常会遇到需要处理不同编码格式的文件的情况。为了确保程序能够正确解析文件内容,必须先判断文件的编码格式。本文将详细介绍如何使用Java来判断文件是否为UTF-8或GBK...
在IT领域,尤其是在Java编程中,字符集编码是至关重要的概念。这关乎到程序如何处理文本数据,确保信息的正确存储、传输和显示。在Java基础教程中,徐培成老师的"Java基础第09天-005.String-字符集编码"主题深入探讨...
但对于非ASCII字符集,如GBK或UTF-8,文件的开头可能会包含特定的字节序列来标识编码。例如,UTF-8编码的文件,如果以BOM(Byte Order Mark)开始,那么前三个字节的值会是-17(0xEF)、-69(0xBB)和-65(0xBF)。...
`getBytes()`将字符串转换为字节数组,`new String(byte[], charset)`根据字符集将字节数组还原为字符串。 18. **判断前缀与后缀** `startsWith(String prefix)`和`endsWith(String suffix)`分别用于检查字符串...
不同于JavaScript,Java提供了更多的编码支持,并且可以直接通过转换字符集的方式来实现长度的计算。这里采用的是将原始字符串先转换为GBK编码,然后再转换回ISO-8859-1编码,以此来计算长度。 #### 2. 代码示例 ``...
它旨在确定一段文本或一组字符属于哪种语言。这对于信息检索、机器翻译、社交媒体分析等领域有着广泛的应用。 在Java中,实现语种识别通常涉及以下技术: 1. **N-gram模型**:N-gram是连续出现的n个字符序列,常...
Java字符集是编程中不可或缺的一部分,特别是在处理文本和网络数据时。这个名为"java_character-set.rar_java Character"的压缩包包含了一些示例程序,旨在帮助我们深入理解Java中的字符集和编码方式。在这个讨论中...