由于程序需要导入一些文本文件,所以碰到文件编码问题。原来想输入的文本文件都用utf-8编码格式问题就解决了,但是后来发现,需要导入的文件,是由第三方来提供的,格式我们控制不了,所以在导入前需要检测文件的编码,然后根据编码来读入,以避免乱码问题。
经过一番查找,发现用现成的第三方jar包比较简单、可靠。需要的jar包:cpdetector_1.0.8.jar,另外需要依赖antlr-2.7.2.jar和chardet.jar包,网上下载地址很多,就不上传了。
测试文件编码:
import info.monitorenter.cpdetector.io.CodepageDetectorProxy;
import info.monitorenter.cpdetector.io.ParsingDetector;
import info.monitorenter.cpdetector.io.JChardetFacade;
import info.monitorenter.cpdetector.io.ASCIIDetector;
import info.monitorenter.cpdetector.io.UnicodeDetector;
String chartsetName;
//获取文件编码格式
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
detector.add(new ParsingDetector(false));
detector.add(JChardetFacade.getInstance());
detector.add(ASCIIDetector.getInstance());
detector.add(UnicodeDetector.getInstance());
java.nio.charset.Charset charset = null;
try {
charset = detector.detectCodepage(sourseFile.toURL());
} catch (Exception ex) {
ex.printStackTrace();
}
if (charset != null) {
chartsetName=charset.name();
} else {
chartsetName="UTF-8";
}
//获取编码后按编码格式读取文件
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(fileName),chartsetName));
while (in.ready()) {
str = in.readLine().trim();
... ...
}
如果测试输入的文本流的格式,可以如下:
charset=detector.detectCodepage(InputStream in, int length);
可以用下面代码获得Java支持编码集合:
Charset.availableCharsets().keySet();
可以用下面的代码获得系统默认编码:
Charset.defaultCharset();
分享到:
相关推荐
本工程用于研究如何使用Java代码获取文件、文件流或字符串的编码方式 本工程编码方式:UTF-8 开发工具:MyEclipse 参考博客:http://blog.csdn.net/gaohuanjie/article/details/43735891
用于对字符串进行编码和解码,只需要输出字符串或者编码后的文件便可以实现操作。
本文实例讲述了C++实现判断一个字符串是否为UTF8或GBK格式的方法。分享给大家供大家参考,具体如下: 在处理外部数据的时候,很可能因为数据格式不一样而导致乱码,甚至导致某些程序挂掉。鉴于对多数系统来说,使用...
C++_Base64编码解码_文件_字符串..................................
qt实现转换文件字符集编码
JAVA连接字符串到配置文件
由于项目需要,需要字符串转为XML文件,直接用Fileopen进行EncodingUTF8编码后,发现文件实际为UTF-8 BOM编码 问度娘发现有相同问题,但解决方式是利用新建一个UTF-8的TXT文件后,再进行COPY加内容。感觉这样操作...
利用文件中的字符资源建立哈夫曼树,利用建立的哈夫曼树对给定的字符串进行编码。资源中含有可执行的源代码以及实验报告。
网上都是针对文件图片的Base64处理, 补充这个工具处理文本,字符串。 编码为UTF8。
通过查询文件中的字符以及各个字符的权值(出现次数),对某个字符串进行哈夫曼编码和解码,代码则会通过生成哈夫曼二叉树计算出各个字符的编码,存在一个文件中,这时输入要编码的字符串就可以得到其哈夫曼编码,还...
判断字符编码格式代码,用C++编写的如何判断字符编码格式,UTF-8,ASCII等
python判断文件和字符串编码类型可以用chardet工具包,可以识别大多数的编码类型。但是前几天在读取一个Windows记事本保存的txt文件时,GBK却被识别成了KOI8-R,无解。 然后就自己写了个简单的编码识别方法,代码...
对于给定一个字符串的编号,迅速解码出它在上述字典中的字符串编码。 数据输入 输入数据由input.txt提供。文件的第一行为一个整数N (1,000),表示字符串 的编号。 数据输出 输出该编号做对应的字符串编码到ouput.txt...
java获取字符串编码类型代码(导入直接查看结果)
/********************************************************************** * Description : create huffmanTree and huffmanCode by input string * and decode a 0、1 sequence by huffmanCode ...
LZW就是通过建立一个字符串表,用较短的代码来表示较长的字符串来实现压缩. LZW编码是基于1977年开发的LZ77算法为基础的。LZ77编码算法的核心是查找从前向缓冲存储器开始的最长的匹配串。LZW压缩算法的基本原理:...
Base64文本字符串解码编码双向解析转换工具,网上都是针对文件的Base64处理,这个就只针对字符串文本,字符串编码为UTF8。
图片文件与Base64编码字节数组字符串互转
从字符串中取出数字 以模式匹配比较字符串 ...编码解码Base64字符串 计算字符串中的字数 读取字符串资源 转换列举类型值为字符串 转换数字为前导零字符串 运行时创建GUID 返回子串在字符串中的最后位置 颠倒字符串
Athena-A 是通过字典来快速更新新版软件中的非标准字符串资源的汉化工具,具有挪移字符串的功能,还有字典提取、字典编辑、虚拟地址转换、编码查询、自动翻译、自动过滤、替换等功能。支持使用外部翻译软件直接翻译...