解决读取文件乱码问题小结
来源:互联网 发布:软件开发源代码管理 编辑:程序博客网 时间:2024/05/16 07:54
最经用到读取txt,并对里面的部分进行查找替换,读写的时候出现乱码,以下是查到的判断文件编码方法,不过不太好用
//对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65,所以,判定是否是UTF-8编码格式的代码片段如下:
import java.io.File;import java.io.FileInputStream;import java.io.InputStream;public class Test {public static void main(String[] args) {File f=new File("待判定的文本文件名"); try{ InputStream ios=new FileInputStream(f); byte[] b=new byte[3]; ios.read(b); ios.close(); if(b[0]==-17&&b[1]==-69&&b[2]==-65) System.out.println(f.getName()+"编码为UTF-8"); else System.out.println(f.getName()+"可能是GBK"); }catch(Exception e){ e.printStackTrace(); }}}
上边是网上查到的判断文件编码格式的不太好使用着,继续查查到如下内容:
若想实现更复杂的文件编码检测,可以使用一个开源项目cpdetector,代码如下:
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,它可以完成大多数文件的编码 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果
加进来,如ParsingDetector、 JChardetFacade、ASCIIDetector、UnicodeDetector。detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则
返回探测到的字符集编码。
下面是自己写的测试以下:
import info.monitorenter.cpdetector.io.ASCIIDetector;import info.monitorenter.cpdetector.io.CodepageDetectorProxy;import info.monitorenter.cpdetector.io.JChardetFacade;import info.monitorenter.cpdetector.io.UnicodeDetector;import java.io.File;import java.io.IOException;import java.net.MalformedURLException;import java.nio.charset.Charset;public class CharsetUtil {/** * 检查文件的编码格式 * @param path 待查文件路径 * @return String文件的编码名 */public static String getCharset(String path){CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();detector.add(JChardetFacade.getInstance());detector.add(ASCIIDetector.getInstance());detector.add(UnicodeDetector.getInstance());File file = new File(path);Charset charset = null;try {charset = detector.detectCodepage(file.toURL());if(charset!=null){return charset.name();}else{return null;}} catch (MalformedURLException e) {e.printStackTrace();return null;} catch (IOException e) {e.printStackTrace();return null;}}
注:还需要引入两个Jar包 cpdetector_1.0.8.jar .jar 和jchardet-1.0.jar不然会报错
- 解决读取文件乱码问题小结
- 解决读取文件乱码问题
- Java读取文件 解决中文乱码问题
- 解决FileInputStream 读取文件中文乱码问题
- 解决python读取中文文件乱码问题
- 解决IO流读取文件乱码问题
- 解决C#读取文件乱码问题
- 读取properties文件以及解决读取时的乱码问题
- 读取文件乱码问题
- 读取文件时出现中文乱码问题的解决
- Java读取properties文件中文乱码问题的解决
- Andoird - 解决读取txt文件中文乱码问题
- 读取页面后输出到文件,解决乱码问题
- android解决读取中文文件乱码的问题
- 解决 JAVA读取本地ANSI文件乱码问题
- qt读取txt文件 ,解决汉字乱码问题
- 解决生成的saiku文件读取中文乱码的问题
- Perl读取Excel文件并解决中文乱码问题
- AspNetPager分页
- Apache myfaces介绍和配置
- rg.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unab
- silverlight的Datagrid的超复杂表头写法
- android实现点击短链接进入应用 并获得整个连接的内容
- 解决读取文件乱码问题小结
- ZOJ 3675 Trim the Nails(bfs+位运算处理)
- IOS_Xcode4.6制作framework
- Primefaces AJAX callbacks: onstart vs. onclick
- *.dat 文件自动设置ip地址
- 腾讯技术分享实录:游戏后台开发九问
- 使用cpufreq给CPU临时调整主频
- 使用jquery dataTable
- xcode 插件收集