/*这是一个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();
}
}
分享到:
相关推荐
它的类库很小,只有500K左右,利用该类库判定文本文件的代码如下(由于cpdetector的算法使用概率统计,所以结果并不是100%准确的,但是是迄今为止我见过
如果很多时候我们没有约定好文件格式,我们就难以读取文件内容,此时,我们就需要一个工具...返回探测到的字符集编码。可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于 指示是否显示探测过程的详细信息
Java自动识别文件字符编码工具类 参考博客 https://blog.csdn.net/superbeyone/article/details/103036914 使用方式: String encode = EncodingDetect.getFileEncode(geoJsonFile); log.info("系统检测到文件[ {}...
Java 字符串与文本相关实例源码,比如不可变字符串与限定字符串、字符串的比较、提取子串、修改缓冲区中的字符串、判断回文串、正则表达式、字符串匹配、正则表达式语法等,还一一些比如用于比较两个变量是否引用同...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...
032004_【第20章:Java新IO】_字符集笔记.pdf 032005_【第20章:Java新IO】_Selector笔记.pdf 042101_【课程讲解】_附录:Eclipse开发工具笔记.pdf 050101_〖开发实例〗_Java开发实例讲解(人员管理)笔记.pdf
1、短信传输分三种模式:Block(淘汰)、Text(纯文本模式,用处受限,不能实现中文)、PDU(手机默认的短信模式,可以使用任何字符集) 2、PDU编码主要包括两个主要的部分:一是PDU串的整体数据格式,分别因为发送...
Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...
第九章:基于文本的应用 131 学习目标 131 程序交互的几种方式 132 常用类方法说明 132 String的方法 132 正则表示式(Regular expression) 133 StringBuffer类 135 StringBuffer与String的区别 136 集合类的使用 ...
该项目旨在提供与语言相关的一些任务,例如:检测字符集,某些转换(从宏动到小动量),动词共轭等。有很多类似这样的项目,例如: (python), ( Java)等。但是,大多数情况下,它们是服务器端的,需要一些配置...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...