我只想用java语言获取网页源代码,我只想用正确的编码类型获取该内容。到目前为止,我能够获得网页的内容。但对于某些网页而言,内容会带有荒谬的字符。所以我需要检测该网页的字符集。
根据我的小研究,我发现有一个jChardet库可以做到这一点。但我无法将其导入我的项目。有人可以帮助我吗?
顺便说一句,下面的代码是阅读网页内容的代码
StringBuilder builder = new StringBuilder();
InputStream is = fURL.openStream();
BufferedReader buffer = null;
buffer = new BufferedReader(new InputStreamReader(is, encodingType));
int byteRead;
while ((byteRead = buffer.read()) != -1) {
builder.append((char) byteRead);
}
buffer.close();
return builder;
答案 0 :(得分:4)
阅读HTTP响应的Content-Type
标头,这是获取字符集的最佳方式。只有在没有其他选择时才应用猜测 - 你这样做。
答案 1 :(得分:1)
您也可以使用http://jchardet.sourceforge.net/
private static String detectCharset(byte[] body) {
nsDetector det = new nsDetector(nsPSMDetector.ALL);
det.Init(new nsICharsetDetectionObserver() {
public void Notify(String charset) {
HtmlCharsetDetector.found = true;
}
});
boolean done = false;
boolean isAscii = true;
if (isAscii) {
isAscii = det.isAscii(body, body.length);
}
// DoIt if non-ascii and not done yet.
if (!isAscii && !done) {
done = det.DoIt(body, body.length, false);
}
return det.getProbableCharsets()[0];
}
答案 2 :(得分:0)
最低限度,您需要读取并解析HTTP标头,以查看它们是否在HTTP标头中声明编码,并且在没有此类声明(相当常见)的情况下,解析文档本身以查找{{1} }标记声明编码。对于XHTML文档,您需要检查XML声明并默认为utf-8。这仍然会留下大量具有未声明编码的页面,因此需要一些启发式方法。您可以检查HTML5草案中的section on encodings,其中也包含一些启发式覆盖(例如,将iso-8859-1视为windows-1252)。