jchardet是mozilla自动字符集探测算法代码的java移植,其源代码可以从sourceforge下载
import org.mozilla.intl.chardet.HtmlCharsetDetector;
import org.mozilla.intl.chardet.nsDetector;
import org.mozilla.intl.chardet.nsICharsetDetectionObserver;
//方法 获取文件的编码格式
public String getCharSetEncoding(File file) throws Exception
{
boolean found=false;
nsICharsetDetectionObserver ndo=new nsICharsetDetectionObserver() {
public void Notify(String arg0) {
HtmlCharsetDetector.found=true;
}
};
nsDetector det=new nsDetector();
/**
* 初始化nsDetector()
*lang为一个整数,用以提示语言线索,可以提供的语言线索有以下几个:
*
1. Japanese
2. Chinese
3. Simplified Chinese
4. Traditional Chinese
5. Korean
6. Dont know (默认)
*/
// nsDetector det=new nsDetector(lang);
det.Init(ndo);
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
byte[] buf=new byte[1024];
boolean done=false;
boolean isAscii=true;
int length=0;
while((length=bis.read(buf))!=-1)
{
if(isAscii)
{
isAscii=det.isAscii(buf, length);
}
if(!isAscii&&!done)
{
done=det.DoIt(buf, length, false);
}
}
det.DataEnd();
if(isAscii)
{
found=true;
return "ASCII";
}
if(!found)
{
String pro[]=det.getProbableCharsets();//获取可能的编码格式
if(pro.length>0)
{
return pro[0];//取第一个
}
}
return null;
}