java 读取流的字符编码格式_如何使用Java代码获取文件、文件流或字符串的编码方式...
標簽:
今天通過網絡資源研究了一下如何使用Java代碼獲取文件、文件流或字符串的編碼方式,現將代碼與大家分享:
package com.ghj.packageoftool;
import info.monitorenter.cpdetector.io.ASCIIDetector;
import info.monitorenter.cpdetector.io.ByteOrderMarkDetector;
import info.monitorenter.cpdetector.io.CodepageDetectorProxy;
import info.monitorenter.cpdetector.io.JChardetFacade;
import info.monitorenter.cpdetector.io.ParsingDetector;
import info.monitorenter.cpdetector.io.UnicodeDetector;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.Charset;
/**
* 文件工具類
*
* @author 高煥杰
*/
public class FileTool {
/**
* 獲取本地文件的編碼格式
*
* @param file 要判斷的文件編碼格式
*
* @author 高煥杰
*/
public static String getLocalFileEncode(File localFile) {
/*
* cpDetector是探測器,它把探測任務交給具體的探測實現類的實例完成。
* cpDetector內置了一些常用的探測實現類,這些探測實現類的實例可以通過add方法 加進來,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。
* cpDetector按照“誰最先返回非空的探測結果,就以該結果為準”的原則返回探測到的字符集編碼。cpDetector是基于統計學原理的,不保證完全正確。
*/
CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();
codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于檢查HTML、XML等文件或字符流的編碼,構造方法中的參數用于指示是否顯示探測過程的詳細信息,為false不顯示。
codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數文件的編碼 測定。所以,一般有了這個探測器就可滿足大多數項目的要求,如果你還不放心,可以再多加幾個探測器,比如下面的ASCIIDetector、UnicodeDetector等。
codepageDetector.add(new ByteOrderMarkDetector());
codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII編碼測定
codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族編碼的測定
Charset charset = null;
try {
charset = codepageDetector.detectCodepage(localFile.toURI().toURL());
if (charset != null){
return charset.name();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 獲得遠程URL文件的編碼格式
*
* @param url 遠程文件的URL路徑
*
* @author 高煥杰
*/
public static String getURLFileEncode(URL url) {
/*
* cpDetector是探測器,它把探測任務交給具體的探測實現類的實例完成。
* cpDetector內置了一些常用的探測實現類,這些探測實現類的實例可以通過add方法 加進來,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。
* cpDetector按照“誰最先返回非空的探測結果,就以該結果為準”的原則返回探測到的字符集編碼。cpDetector是基于統計學原理的,不保證完全正確。
*/
CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();
codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于檢查HTML、XML等文件或字符流的編碼,構造方法中的參數用于指示是否顯示探測過程的詳細信息,為false不顯示。
codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數文件的編碼 測定。所以,一般有了這個探測器就可滿足大多數項目的要求,如果你還不放心,可以再多加幾個探測器,比如下面的ASCIIDetector、UnicodeDetector等。
codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII編碼測定
codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族編碼的測定
Charset charset = null;
try {
charset = codepageDetector.detectCodepage(url);
if (charset != null){
return charset.name();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 獲得文件流的編碼格式
*
* @param inputStream 文件流
*
* @author 高煥杰
*/
public static String getInputStreamEncode(InputStream inputStream) {
/*
* cpDetector是探測器,它把探測任務交給具體的探測實現類的實例完成。
* cpDetector內置了一些常用的探測實現類,這些探測實現類的實例可以通過add方法 加進來,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。
* cpDetector按照“誰最先返回非空的探測結果,就以該結果為準”的原則返回探測到的字符集編碼。cpDetector是基于統計學原理的,不保證完全正確。
*/
CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();
codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于檢查HTML、XML等文件或字符流的編碼,構造方法中的參數用于指示是否顯示探測過程的詳細信息,為false不顯示。
codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數文件的編碼 測定。所以,一般有了這個探測器就可滿足大多數項目的要求,如果你還不放心,可以再多加幾個探測器,比如下面的ASCIIDetector、UnicodeDetector等。
codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII編碼測定
codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族編碼的測定
Charset charset = null;
try {
charset = codepageDetector.detectCodepage(inputStream, 0);
if (charset != null){
return charset.name();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 獲得字符串的編碼格式
*
* @param stringValue 要判斷的文件編碼格式字符串
*
* @author 高煥杰
*/
public static String getStringEncode(String stringValue) {
/*
* cpDetector是探測器,它把探測任務交給具體的探測實現類的實例完成。
* cpDetector內置了一些常用的探測實現類,這些探測實現類的實例可以通過add方法 加進來,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。
* cpDetector按照“誰最先返回非空的探測結果,就以該結果為準”的原則返回探測到的字符集編碼。cpDetector是基于統計學原理的,不保證完全正確。
*/
CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();
codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于檢查HTML、XML等文件或字符流的編碼,構造方法中的參數用于指示是否顯示探測過程的詳細信息,為false不顯示。
codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數文件的編碼 測定。所以,一般有了這個探測器就可滿足大多數項目的要求,如果你還不放心,可以再多加幾個探測器,比如下面的ASCIIDetector、UnicodeDetector等。
codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII編碼測定
codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族編碼的測定
Charset charset = null;
try {
InputStream inputStream = new ByteArrayInputStream(stringValue.getBytes());
charset = codepageDetector.detectCodepage(inputStream, 3);
if (charset != null){
return charset.name();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
由于上面代碼依賴了很多jar包,所以請直接下載使用MyEclipse開發的Demo。? ? ? ? 【
標簽:
總結
以上是生活随笔為你收集整理的java 读取流的字符编码格式_如何使用Java代码获取文件、文件流或字符串的编码方式...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab中调用java代码_Matl
- 下一篇: java远程方法调用(rmi)--好_R