Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 829|回复: 0

Java完美解决获取网站编码问题

[复制链接]

该用户从未签到

发表于 2011-8-1 23:13:54 | 显示全部楼层 |阅读模式
暑假再做一个项目,前提是要获取网站的编码方式!!我开始用的上次编写中文网页分类程序的获取源码,最后我在做项目的时候经常出现获取的编码方式不对!!最后我就把程序的改进了!!现在虽然不能保证100%的对,但是95%都是可以保
  1. package spider;
  2. import java.io.BufferedReader;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.net.HttpURLConnection;
  6. import java.net.URL;
  7. import java.util.regex.Matcher;
  8. import java.util.regex.Pattern;
  9. import org.htmlparser.*;
  10. import org.htmlparser.filters.*;
  11. import org.htmlparser.util.*;
  12. import org.htmlparser.tags.MetaTag;
  13. public class getcharset {
  14. private String URL = null;
  15. private String defaultencode = "gbk";
  16. /**
  17. *
  18. * @param url the web you are going to deal
  19. */
  20. public getcharset(String url) {
  21. URL = url;
  22. }
  23. /**
  24. * method getecode just get the webpage's charset
  25. * @return
  26. */
  27. public String getecode() {
  28. try {
  29. URL url = new URL(URL);
  30. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  31. conn.setConnectTimeout(10000);
  32. conn.setReadTimeout(4000);
  33. conn.connect();
  34. InputStream is = conn.getInputStream();
  35. BufferedReader br = new BufferedReader(new InputStreamReader(is));
  36. String result = "";
  37. String content = "";
  38. while ((content = br.readLine()) != null) {
  39. result = result + content.toLowerCase();
  40. if (content.toLowerCase().contains("</head>")) {
  41. break;
  42. }
  43. }
  44. //System.out.println(result);
  45. return getencode(result);
  46. } catch (Exception ev) {
  47. //System.out.println("1==================" + ev.getMessage());
  48. return defaultencode; }
  49. }
  50. private String getencode(String resource) {
  51. try {
  52. String encode = "";
  53. Parser parser = new Parser(resource);
  54. NodeFilter filtertag = new TagNameFilter("meta");
  55. NodeFilter filterA = new HasAttributeFilter("http-equiv", "content-type");
  56. NodeFilter filter = new AndFilter(filtertag, filterA);
  57. NodeList nodes = parser.extractAllNodesThatMatch(filter);
  58. MetaTag charset = null;
  59. if (nodes.size() != 0) {
  60. for (int i = 0; i < nodes.size(); i++) {
  61. charset = (MetaTag) nodes.elementAt(i);
  62. }
  63. String content = charset.getMetaContent();
  64. if (content.contains("charset")) {
  65. int flag2 = content.indexOf("=");
  66. encode = content.substring(flag2 + 1);
  67. parser = null;
  68. if (encode != null || !encode.equals("")) {
  69. return encode;
  70. } else {
  71. return defaultencode;
  72. }
  73. } else {
  74. content = charset.toHtml();
  75. String[] thecode = content.split("charset");
  76. String code = thecode[1].replaceAll("[=/\">]*", "");
  77. return code;
  78. }
  79. } else {
  80. return defaultencode;
  81. }
  82. } catch (Exception e) {
  83. //System.out.println("2==================" + e.getMessage());
  84. String codeing = finalGet(resource);
  85. if (!codeing.equals("")) {
  86. return codeing.trim();
  87. } else {
  88. return defaultencode;
  89. }
  90. }
  91. }
  92. private String finalGet(String resource) {
  93. String result = "";
  94. String code = "";
  95. String reg = "<meta http-equiv=[\"]{0,1}content-type[\"]{0,1}";
  96. Matcher m = Pattern.compile(reg).matcher(resource.toLowerCase());
  97. while (m.find()) {
  98. result = result + resource.substring(m.start());
  99. }
  100. int flag = result.indexOf(">");
  101. //System.out.println(resource+"========");
  102. String[] thecode = result.substring(0, flag).toLowerCase().replaceAll(reg, "").split("charset");
  103. // if (thecode[0].toLowerCase().contains("charset=")) {
  104. // code = thecode[0].replaceAll("(charset=)", "");
  105. // } else {
  106. code = thecode[1].replaceAll("[=/\"]*", "");
  107. // }
  108. // System.out.println(code+"======");
  109. return code;
  110. }
  111. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-27 02:48 , Processed in 0.363902 second(s), 34 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表