利用第三方的Jar包內的類和方法來判別檔案編碼
阿新 • • 發佈:2019-02-08
今天在論壇裡看見了一個人發帖子問,如何檢視檔案的編碼。有一個人回帖推薦了一片文章,我看了一下,覺得挺好的,我把原文的意思取捨了一下,整理成了下面的文章。原文請檢視:http://www.iteye.com/topic/108540,作者是hdwangyi 。
他在帖子中貼出了一段程式碼來判斷一個文字是UTF-8編碼的,思路是讀取一個txt檔案,擷取字元流的前3個字元(即標示位),判斷是否與UTF-8的格式的標示位一致。
import java.io.*; public class TestText { public static void main(String args[]){ File file = new File("C:/1.txt"); try{ InputStream stream = new FileInputStream(file); byte[] byteArray = new byte[3]; stream.read(byteArray); stream.close(); if (byteArray[0] == -17 && byteArray[1] == -69 && byteArray[2] == -65) System.out.println("UTF-8"); else System.out.println("可能是其他的編碼"); } catch(Exception e){ e.printStackTrace(); } } }
import cpdetector.io.*; import java.io.*; import java.nio.charset.*; public class PageCode { public static void main(String args[]){ CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance(); detector.add(JChardetFacade.getInstance()); Charset charset = null; File f = new File("C:/1.txt"); try { charset = detector.detectCodepage(f.toURL()); } catch (Exception e) { e.printStackTrace(); } if(charset!=null){ System.out.println(f.getName()+"編碼是:"+charset.name()); }else System.out.println(f.getName()+"未知"); } }
輸出:
1.txt編碼是:GB2312
可以把main函式的相關內容改成一個方法重用,從而達到自由判斷檔案編碼的目的。