- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
判定文件编码或文本流编码方法
在程序中,文本文件经常用来存储标准的ASCII码文本,比如英文、加减乘除等号这些运算符号。文本文件也可能用于存储一些其他非ASCII字符,如基于GBK的简体中文,基于GIG5的繁体中文等等。在存储这些字符时需要正确指定文件的编码格式;而在读取这些文本文件时,有时候就需要自动判定文件的编码格式。
按照给定的字符集存储文本文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式。其实,如果项目运行的平台就是中文操作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就可以了:GBK和UTF-8。由于中文Windows默认的编码是GBK,所以一般只要判定UTF-8编码格式。
对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65,所以,判定是否是UTF-8编码格式的代码片段如下:
Java代码
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]==-17b[1]==-69b[2]==-65)
System.out.println(f.getName()+编码为UTF-8);
else System.out.println(f.getName()+可能是GBK);
}catch(Exception e){
e.printStackTrace();
}
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]==-17b[1]==-69b[2]==-65)
System.out.println(f.getName()+编码为UTF-8);
else System.out.println(f.getName()+可能是GBK);
}catch(Exception e){
e.printStackTrace();
}
上述代码只是简单判定了是否是UTF-8格式编码的文本文件,如果项目对要判定的文本文件编码不可控(比如用户上传的一些HTML、XML等文本),可以采用一个现成的开源项目:cpdetector,它所在的网址是:/。它的类库很小,只有500K左右,利用该类库判定文本文件的代码如下:
Java代码
/*
detector是探测器,它把探测任务交给具体的探测实现类的实例完成。
cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法
加进来,如ParsingDetector、 JChardetFacade、ASCIIDetector、UnicodeDetector。
detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的
字符集编码。
*/
cpdetector.io.CodepageDetectorProxy detector =
cpdetector.io.CodepageDetectorProxy.getInstance();
/*
ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于
指示是否显示探测过程的详细信息,为false不显示。
*/
detector.add(new cpdetector.io.ParsingDetector(false));
/*
JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码
测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以
再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
*/
d
您可能关注的文档
最近下载
- 违章驾驶员交通安全培训精品课件.pptx
- Panasonic松下电器卫浴产品 电子坐便器CH2N615WSC_2N625GYC用户手册.pdf
- 人教部编版四年级下册语文第五单元教案设计(含交流平台习作例文和习作教案).doc
- 小学数学_青岛版六年级下册数学智慧广场“鸡兔同笼”问题教学设计学情分析教材分析课后反思.doc
- 2023年南京特殊教育师范学院特殊教育专业《普通心理学》期末试卷A(有答案).docx VIP
- 猪的信号(育肥猪).doc
- 机械设计基础(第六版)杨可桢课后习题答案.pdf
- 紧密型县域医疗卫生共同体消毒供应中心运营指南(2020年版 医联体建设).docx
- 《潍坊港总体规划》报告.doc
- 巧用仪式感提升高中阶段班级管理.docx VIP
文档评论(0)