多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > Java如何獲取文件編碼格式

Java如何獲取文件編碼格式

來源:程序員人生   發布時間:2017-03-24 08:58:03 閱讀次數:8952次

學習Java的同學注意了?。?! 
學習進程中遇到甚么問題或想獲得學習資源的話,歡迎加入Java學習交換群,群號碼:183993990  我們1起學Java!


1:簡單判斷是UTF⑻或不是UTF⑻,由于1般除UTF⑻以外就是GBK,所以就設置默許為GBK。

 依照給定的字符集存儲文件時,在文件的最開頭的3個字節中就有可能存儲著編碼信息,所以,基本的原理就是只要讀出文件前3個字節,判定這些字節的值,就能夠得知其編碼的格式。其實,如果項目運行的平臺就是中文操作系統,如果這些文本文件在項目內產生,即開發人員可以控制文本的編碼格式,只要判定兩種常見的編碼就能夠了:GBK和UTF⑻。由于中文Windows默許的編碼是GBK,所以1般只要判定UTF⑻編碼格式。
   對UTF⑻編碼格式的文本文件,其前3個字節的值就是⑴7、⑹9、⑹5,所以,判定是不是是UTF⑻編碼格式的代碼片斷以下:
  1. File file = new File(path);  
  2. InputStream in= new java.io.FileInputStream(file);  
  3. byte[] b = new byte[3];  
  4. in.read(b);  
  5. in.close();  
  6. if (b[0] == -17 && b[1] == -69 && b[2] == -65)  
  7.     System.out.println(file.getName() + ":編碼為UTF⑻");  
  8. else  
  9.     System.out.println(file.getName() + ":多是GBK,也多是其他編碼");  

2:若想實現更復雜的文件編碼檢測,可使用1個開源項目cpdetector,它所在的網址是:http://cpdetector.sourceforge.net/。它的類庫很小,只有500K左右,cpDetector是基于統計學原理的,不保證完全正確,利用該類庫判定文本文件的代碼以下:

讀外部文件(先利用cpdetector檢測文件的編碼格式,然后用檢測到的編碼方式去讀文件):

  1. /** 
  2.  * 利用第3方開源包cpdetector獲得文件編碼格式 
  3.  *  
  4.  * @param path 
  5.  *            要判斷文件編碼格式的源文件的路徑 
  6.  * @author huanglei 
  7.  * @version 2012⑺⑴2 14:05 
  8.  */  
  9. public static String getFileEncode(String path) {  
  10.     /* 
  11.      * detector是探測器,它把探測任務交給具體的探測實現類的實例完成。 
  12.      * cpDetector內置了1些經常使用的探測實現類,這些探測實現類的實例可以通過add方法 加進來,如ParsingDetector、 
  13.      * JChardetFacade、ASCIIDetector、UnicodeDetector。 
  14.      * detector依照“誰最早返回非空的探測結果,就以該結果為準”的原則返回探測到的 
  15.      * 字符集編碼。使用需要用到3個第3方JAR包:antlr.jar、chardet.jar和cpdetector.jar 
  16.      * cpDetector是基于統計學原理的,不保證完全正確。 
  17.      */  
  18.     CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();  
  19.     /* 
  20.      * ParsingDetector可用于檢查HTML、XML等文件或字符流的編碼,構造方法中的參數用于 
  21.      * 唆使是不是顯示探測進程的詳細信息,為false不顯示。 
  22.      */  
  23.     detector.add(new ParsingDetector(false));  
  24.     /* 
  25.      * JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數文件的編碼 
  26.      * 測定。所以,1般有了這個探測器便可滿足大多數項目的要求,如果你還不放心,可以 
  27.      * 再多加幾個探測器,比以下面的ASCIIDetector、UnicodeDetector等。 
  28.      */  
  29.     detector.add(JChardetFacade.getInstance());// 用到antlr.jar、chardet.jar  
  30.     // ASCIIDetector用于ASCII編碼測定  
  31.     detector.add(ASCIIDetector.getInstance());  
  32.     // UnicodeDetector用于Unicode家族編碼的測定  
  33.     detector.add(UnicodeDetector.getInstance());  
  34.     java.nio.charset.Charset charset = null;  
  35.     File f = new File(path);  
  36.     try {  
  37.         charset = detector.detectCodepage(f.toURI().toURL());  
  38.     } catch (Exception ex) {  
  39.         ex.printStackTrace();  
  40.     }  
  41.     if (charset != null)  
  42.         return charset.name();  
  43.     else  
  44.         return null;  
  45. }  
  1. String charsetName = getFileEncode(configFilePath);  
  2. System.out.println(charsetName);  
  3. inputStream = new FileInputStream(configFile);  
  4. BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, charsetName));  


讀jar包內部資源文件(先利用cpdetector檢測jar內部的資源文件的編碼格式,然后以檢測到的編碼方式去讀文件):

  1. /** 
  2.  * 利用第3方開源包cpdetector獲得URL對應的文件編碼 
  3.  *  
  4.  * @param path 
  5.  *            要判斷文件編碼格式的源文件的URL 
  6.  * @author huanglei 
  7.  * @version 2012⑺⑴2 14:05 
  8.  */  
  9. public static String getFileEncode(URL url) {  
  10.     /* 
  11.      * detector是探測器,它把探測任務交給具體的探測實現類的實例完成。 
  12.      * cpDetector內置了1些經常使用的探測實現類,這些探測實現類的實例可以通過add方法 加進來,如ParsingDetector、 
  13.      * JChardetFacade、ASCIIDetector、UnicodeDetector。 
  14.      * detector依照“誰最早返回非空的探測結果,就以該結果為準”的原則返回探測到的 
  15.      * 字符集編碼。使用需要用到3個第3方JAR包:antlr.jar、chardet.jar和cpdetector.jar 
  16.      * cpDetector是基于統計學原理的,不保證完全正確。 
  17.      */  
  18.     CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();  
  19.     /* 
  20.      * ParsingDetector可用于檢查HTML、XML等文件或字符流的編碼,構造方法中的參數用于 
  21.      * 唆使是不是顯示探測進程的詳細信息,為false不顯示。 
  22.      */  
  23.     detector.add(new ParsingDetector(false));  
  24.     /* 
  25.      * JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數文件的編碼 
  26.      * 測定。所以,1般有了這個探測器便可滿足大多數項目的要求,如果你還不放心,可以 
  27.      * 再多加幾個探測器,比以下面的ASCIIDetector、UnicodeDetector等。 
  28.      */  
  29.     detector.add(JChardetFacade.getInstance());// 用到antlr.jar、chardet.jar  
  30.     // ASCIIDetector用于ASCII編碼測定  
  31.     detector.add(ASCIIDetector.getInstance());  
  32.     // UnicodeDetector用于Unicode家族編碼的測定  
  33.     detector.add(UnicodeDetector.getInstance());  
  34.     java.nio.charset.Charset charset = null;  
  35.     try {  
  36.         charset = detector.detectCodepage(url);  
  37.     } catch
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日本不卡不码高清免费观看 | 日本大臿亚洲香蕉大片 | 性视频一区二区三区免费 | 性xxxxⅹhd成人 | 伊人色综合97 | 性欧美18videos | 国产精品一页 | 欧美一二三 | 亚洲成在线观看 | 劲爆欧美第一页 | 看毛片的网址 | 黄色a大片 | haodiaose在线精品免费视频 | 亚洲精品图区 | 久久精品一区二区三区中文字幕 | www.亚洲一区二区三区 | xx69视频| 亚洲综合第一欧美日韩中文 | 日本一区二区三区四区在线观看 | 精品亚洲成a人在线观看 | 在线观看的免费视频网站 | 亚洲制服一区 | 2018生活片性色生活片 | 爱爱欧美| 一级做a爰片久久毛片图片 一级做a爰片欧美aaaa | 女bbwxxxx视频| 国产一区二区免费在线 | 欧美久久久久欧美一区 | 欧美性猛交xxxx黑人喷水 | 国产一级淫片a免费播放口之 | 欧美日韩中文亚洲另类春色 | 欧美性猛交xxxx乱大交中文 | 日本高清www免费视频软件 | 在线一区国产 | 成人久久久久 | 欧美一级第一免费高清 | 亚洲欧美日韩专区 | 欧美在线天堂 | 波多野结衣手机视频一区 | 日韩亚洲欧美日本精品va | 亚洲精品不卡久久久久久 |