各位大牛,我要实现的功能是读取某固定路径下的文件
首先,附上代码
File file = new File(FileName);
if(file.isFile()&&file.exists()){
cbuf = new char[(int)file.length()];
InputStreamReader read = new InputStreamReader(new FileInputStream(file),"GB2312");
reader = new BufferedReader(read);
reader.read(cbuf);
reader.close();
}
要读取的是一个Word文档,出现了乱码,后来我在网上找到了一篇分析文件编码格式的代码,如下
String chartsetName = null;
//获取文件编码格式
//为此单独引进了antlr-2.7.6、chardet-1.0、cpdetector-1.0.10三个jar包
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(file.toURL());
} catch (Exception e) {
e.printStackTrace();
}
if (charset != null) {
chartsetName=charset.name();
} else {
chartsetName="UTF-8";
}
分析出来的编码格式是UTF-16BF,不过设成这种编码格式之后依然出错
后来读取txt文件,这段代码分析出来的代码就开始乱了,一会儿这个一会那个,最后用GB2312竟然正确读出了一个
Word文档,我现在很疑惑到底该怎么正确读取????????
(我要读取的文件一般问Word和PDF文件,各位大牛以前如何解决的,跪求答案)
------解决思路----------------------
首先问你个问题,你从文件中读出来的东西你是如何知道有乱码的,是通过控制台out。print?还是显示到前台乱码?
------解决思路----------------------
就你贴出来的这段代码读取文件是没问题的(文件编码为ANSI),如果还乱码确认一下你的文件编码(或者重新用记事本创建文件,保存时选择一下编码),或者是不是经过了网络传输。另外cbuf = new char[(int)file.length()];这样的写法不可取,尤其是文件比较大的情况,如果是经网络传输就更不可取了。
------解决思路----------------------
显示到前台JSP页面上,JSP页面编码格式是UTF-8
首先问你个问题,你从文件中读出来的东西你是如何知道有乱码的,是通过控制台out。print?还是显示到前台乱码?
你直接写个中文字符串传到前台看看显示什么,要是显示正常就是你读文件的问题,要是显示乱码先处理前后台传值解码问题。
解码问题需要从你看到的结果一步一步反推,一步一步测试,保证每一步都ok才行。