我想获得网页的编码,在网上找了可以用chardet.jar中的方法实现,于是下载了它,导入我的工程中,然后用如下代码进行测试:
import info.monitorenter.cpdetector.io.CodepageDetectorProxy;
import info.monitorenter.cpdetector.io.HTMLCodepageDetector;
import info.monitorenter.cpdetector.io.JChardetFacade;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class WebEncoding {
private static CodepageDetectorProxy detector = CodepageDetectorProxy
.getInstance();
static {
detector.add(new HTMLCodepageDetector(false));
detector.add(JChardetFacade.getInstance());
}
/** 测试用例
try {
System.out.println("*******************");
System.out.println(web.getCharset("http://www.baidu.com/"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
/**
// 遍历,查找字符编码
String key = null;
String tmp = null;
while (iterator.hasNext()) {
key = iterator.next();
tmp = map.get(key).toString().toLowerCase();
// 获取content-type charset
if (key != null && key.equals("Content-Type")) {
int m = tmp.indexOf("charset=");
if (m != -1) {
strencoding = tmp.substring(m + 8).replace("]", "");
return strencoding;
}
}
}
/**
另外关于你用run configurations进行的测试,首先你运行的是
org.mozilla.intl.chardet.HtmlCharsetDetecto
这个类,与WebEncoding无关,即是说两者用到的类不一定相同(你的还需要antlr包里的类)。
其次HtmlCharsetDetecto这个类的main方法是基于参数的,要成功运行当然需要你输入参数了。
就是说少了org/mozilla/intl/chardet/nsICharsetDetectionObserver这个类,一般这种问题是少了某个jar文件,你试试加载 jchardet-1.0.jar 看看?
run configurations我是没试过,只是main函数的话用run Appllication不就行了?
我测试了一下,还是缺少jar包,除了你用到的那两个jar包,你还需要再加一个antlr的jar包(我用的是antlr-2.7.6.jar),然后直接run application就行了。这是输出结果:
[code="java"]*******************
gb2312[/code]