84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
java在读取文件的时候怎么去判断文件的编码:有三种编码方式:有BOM的UTF-8、无BOM的UTF-8、GBK在网上找了很多,都不是很准确的判断特别是对无BOM的UTF-8和GBK的判断,有些例子要把文件读几遍,这样效率太低,不实用,有没有什么好的解决方法,请指教
业精于勤,荒于嬉;行成于思,毁于随。
用户上传的文件确实可能出现各种编码的情况,完美的解决方法不敢保证,但可以基于统计学原理的,最大限度的提供文件编码的侦测。
我使用过这个 cpdetector 基本可以解决我的需要。
附上代码示例:
/** * 获取URL的编码 * * @param url * @return */ public static String getUrlEncode(URL url) { /* * detector是探测器,它把探测任务交给具体的探测实现类的实例完成。 * cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、 * JChardetFacade、ASCIIDetector、UnicodeDetector。 * detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的 * 字符集编码。使用需要用到三个第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar * cpDetector是基于统计学原理的,不保证完全正确。 */ CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance(); /* * ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于 * 指示是否显示探测过程的详细信息,为false不显示。 */ detector.add(new ParsingDetector(false)); detector.add(new ByteOrderMarkDetector()); /* * JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 * 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以 * 再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。 * * 用到antlr.jar、chardet.jar */ detector.add(JChardetFacade.getInstance()); // ASCIIDetector用于ASCII编码测定 detector.add(ASCIIDetector.getInstance()); // UnicodeDetector用于Unicode家族编码的测定 detector.add(UnicodeDetector.getInstance()); java.nio.charset.Charset charset = null; try { charset = detector.detectCodepage(url); } catch (Exception ex) { ex.printStackTrace(); } if (charset != null) { return charset.name(); } return null; } public static void main(String[] args) { try { URL url = new URL("http://www.baidu.com"); String encode = getUrlEncode(url); System.out.println(encode);// UTF-8 } catch (MalformedURLException e) { e.printStackTrace(); } }
就不给你写文件的方法了,File有获取URL的方法的。
我使用的时候导入了这几个jar。
cpdetector_1.0.10.jar,antlr-2.7.4.jar,chardet-1.0.jar
找不到的话,可以留下邮箱,可以发你。
使用InputStreamReader,可以指定编码。
暂时找不到完美的解决办法
用户上传的文件确实可能出现各种编码的情况,完美的解决方法不敢保证,但可以基于统计学原理的,最大限度的提供文件编码的侦测。
我使用过这个 cpdetector 基本可以解决我的需要。
附上代码示例:
就不给你写文件的方法了,File有获取URL的方法的。
我使用的时候导入了这几个jar。
找不到的话,可以留下邮箱,可以发你。
使用InputStreamReader,可以指定编码。
暂时找不到完美的解决办法