苏州Java培训
达内苏州java培训中心

0512-67873100

热门课程

Java获取网页编码的方法

  • 时间:2016-02-15 13:31
  • 发布:苏州java培训
  • 来源:企业笔试题

需要下载cpdetector_1.0.5.jar 和 chardet.jar

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;

import cpdetector.io.CodepageDetectorProxy;

import cpdetector.io.HTMLCodepageDetector;

import cpdetector.io.JChardetFacade;

public class PageEncodeDetector {

private static CodepageDetectorProxy detector = CodepageDetectorProxy

.getInstance();

static {

detector.add(new HTMLCodepageDetector(false));

detector.add(JChardetFacade.getInstance());

}

/**

* 测试用例

*

* @param args

*/

public static void main(String[] args) {

PageEncodeDetector web = new PageEncodeDetector();

try {

System.out.println(web.getCharset("http://www.javaweb.cc/"));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* @param strurl

* 页面url地址,需要以 http://开始,例:http://www.linkzj.cn

* @return

* @throws IOException

*/

public String getCharset(String strurl) throws IOException {

// 定义URL对象

URL url = new URL(strurl);

// 获取http连接对象

HttpURLConnection urlConnection = (HttpURLConnection) url

.openConnection();

;

urlConnection.connect();

// 网页编码

String strencoding = null;

/**

* 首先根据header信息,判断页面编码

*/

// map存放的是header信息(url页面的头信息)

Map<String, List<String>> map = urlConnection.getHeaderFields();

Set<String> keys = map.keySet();

Iterator<String> iterator = keys.iterator();

// 遍历,查找字符编码

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;

}

}

}

/**

* 通过解析meta得到网页编码

*/

// 获取网页源码(英文字符和数字不会乱码,所以可以得到正确<meta/>区域)

StringBuffer sb = new StringBuffer();

String line;

try {

BufferedReader in = new BufferedReader(new InputStreamReader(url

.openStream()));

while ((line = in.readLine()) != null) {

sb.append(line);

}

in.close();

} catch (Exception e) { // Report any errors that arise

System.err.println(e);

System.err

.println("Usage: java HttpClient <URL> [<filename>]");

}

String htmlcode = sb.toString();

// 解析html源码,取出<meta />区域,并取出charset

String strbegin = "<meta";

String strend = ">";

String strtmp;

int begin = htmlcode.indexOf(strbegin);

int end = -1;

int inttmp;

while (begin > -1) {

end = htmlcode.substring(begin).indexOf(strend);

if (begin > -1 && end > -1) {

strtmp = htmlcode.substring(begin, begin + end).toLowerCase();

inttmp = strtmp.indexOf("charset");

if (inttmp > -1) {

strencoding = strtmp.substring(inttmp + 7, end).replace(

"=", "").replace("/", "").replace("\"", "")

.replace("\'", "").replace(" ", "");

return strencoding;

}

}

htmlcode = htmlcode.substring(begin);

begin = htmlcode.indexOf(strbegin);

}

/**

* 分析字节得到网页编码

*/

strencoding = getFileEncoding(url);

// 设置默认网页字符编码

if (strencoding == null) {

strencoding = "GBK";

}

return strencoding;

}

/**

*

*<br>

* 方法说明:通过网页内容识别网页编码

*

*<br>

* 输入参数:strUrl 网页链接; timeout 超时设置

*

*<br>

* 返回类型:网页编码

*/

public static String getFileEncoding(URL url) {

java.nio.charset.Charset charset = null;

try {

charset = detector.detectCodepage(url);

} catch (Exception e) {

System.out.println(e.getClass() + "分析" + "编码失败");

}

if (charset != null)

return charset.name();

return null;

}

}

苏州java培训:suz.java.tedu.cn

上一篇:Java的方法修饰符
下一篇:Java程序执行基本流程

Java编程计算任意两个日期相距的天数

Java语言中定义常量注意事项解析

Java生成不规则验证码程序代码

Java读取操作Word,PDF,Excel的四种方法

选择城市和中心
贵州省

广西省

海南省