- 浏览: 609407 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
kangh:
转载的也拿出来 都不试一下 完全错误
Nginx+ffmpeg的HLS开源服务器搭建配置及开发详解 -
wangtxlz:
#cd builders/cmake#cmake .系统提示命 ...
crtmpserver流媒体服务器的介绍与搭建 -
hnraysir:
支持支持支持
手机Android音视频采集与直播推送,实现单兵、移动监控类应用 -
wuent:
把web服务器和php框架绑定到一起?真不建议这样。。。
Swoole(PHP高级Web开发框架) -
wuent:
有更详细的性能比较吗?php,python,java
PHP中的(伪)多线程与多进程
最近研究抓取网页内容,发现要获取页面的编码格式,Java没有现成的实现方法,虽然csdn上有个达人写了一篇文章,附有代码,可惜,我没有找到相关的包,不得已,只好自己动手丰衣足食了。
Java代码
文章中用到的lib包,在附件中有可以下载。写出来,希望大家都happy,不用再为这个烦恼。
Java代码
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()); } /** 测试用例 * @param args */ public static void main(String[] args) { WebEncoding web=new WebEncoding(); try { System.out.println(web.getCharset("http://www.pujia.com/")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * @param strurl * 页面url地址,需要以 http://开始,例:http://www.pujia.com * @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; } } 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()); } /** 测试用例 * @param args */ public static void main(String[] args) { WebEncoding web=new WebEncoding(); try { System.out.println(web.getCharset("http://www.pujia.com/")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * @param strurl * 页面url地址,需要以 http://开始,例:http://www.pujia.com * @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; } }
文章中用到的lib包,在附件中有可以下载。写出来,希望大家都happy,不用再为这个烦恼。
发表评论
-
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
2015-03-17 11:01 1152在Java多线程应用中,队列的使用率很高,多数生产消费模型的 ... -
RabbitMQ (五)主题(Topic)
2015-02-27 17:05 0转载请标明出处:http://blog.csdn.net/l ... -
RabbitMQ (四) 路由选择 (Routing)
2015-02-27 17:04 0上一篇博客我们建立了一个简单的日志系统,我们能够广播日志消 ... -
RabbitMQ (三) 发布/订阅
2015-02-27 17:02 1247转发请标明出处:http://blog.csdn.net/l ... -
RabbitMQ (二)工作队列
2015-02-27 17:01 1292转载请标明出处:http:/ ... -
RabbitMQ 入门 Helloworld
2015-02-27 17:00 1189转载请标明出处:http://blog.csdn.net/l ... -
生成文本聚类java实现 (3)
2014-05-25 22:25 769很多网友看到我的聚类的研究,到后来基本上都是到car ... -
生成文本聚类java实现 (2)
2014-05-25 22:23 1416Java代码 4.从剩余的词中提取文本 ... -
生成文本聚类java实现 (1)
2014-05-25 22:23 1110本章主要的学习是中文分词 和两种统计词频(传统词频和T ... -
JAVA中List、Map、Set的区别与选用
2013-04-30 01:19 959类层次关系如下: Collection ├List│├L ... -
一个简单的MongoDB操作类
2013-03-15 10:04 0import java.net.UnknownHostExc ... -
Java设计模式总结
2013-02-20 23:03 0常见模式分类: 主要模式的定义和描述: ... -
mongodb——java封装(id自增,gridFS)
2013-01-30 20:08 2033/** * 数据库接口 * @author tho ... -
做MongoDB并发测试
2013-01-30 17:13 1056com.mongodb.MongoOptions源代码,其中有 ... -
【MongoDB for Java】Java操作MongoDB
2013-01-27 18:23 902上一篇文章: http://www.cnblogs.com ... -
java泛型
2012-11-30 11:21 0什么是泛型? 泛型(Generic type 或者 gen ... -
Java synchronized详解
2012-11-30 10:27 0第一篇: 使用synchronized 在编写一个类 ... -
BufferedImage与byte[]互转
2012-11-19 23:51 1287转载自:http://www.cnblogs.com/XL ... -
网络BMP图片本地保存
2012-11-19 23:50 933import java.awt.image.BufferedI ... -
图形数字的识别算法: 车牌识别及验证码识别的一般思路
2012-11-17 19:24 0图形数字的识别算法: 车牌识别及验证码识别的一般思路 本文源自 ...
相关推荐
### Java字符串编码转换详解 #### 一、Java 字符串编码转换基础 在Java中,字符串的处理是非常常见的操作之一,而字符编码是确保数据正确显示的关键因素。本篇文章将重点介绍Java中字符串编码的转换方法及其在Web...
值得注意的是,这个过程中可能会遇到编码问题、样式丢失、图片无法显示等问题,因此实际应用时可能需要更复杂的处理逻辑,比如处理CSS、JavaScript等,以及对异常的妥善处理。 总结一下,Java中将URL转换为PDF涉及...
这种方式下,无论是在Java代码中还是在JSP页面中处理从数据库中取出的数据,都需要确保编码的一致性。例如,如果数据库使用的是UTF-8编码,而JSP页面也需要显示这些数据,那么在处理结果集(`ResultSet`)中的数据时...
Java 实现 RTSP/RTMP 转 M3U8/FLV/HLS/MP4 是网络直播和视频回放的重要技术,它涉及到多种协议、工具和格式的交互。在这个场景下,Java 通常作为后端处理服务器,处理来自不同来源(如海康、大华等监控设备)的实时...
Java 实现 RTSP/RTMP 转 M3U8/FLV/HLS/MP4 等技术在Web直播和回放中的应用是现代互联网流媒体服务的关键组成部分。RTSP(Real-Time Streaming Protocol)和RTMP(Real-Time Messaging Protocol)主要用于实时视频...
java用来获取网页编码的jar,可以用来判定目标链接的页面的编码格式
在IT领域,特别是Java...总之,使用Java读取网页并生成静态页面涉及到网络编程、输入输出流操作、编码处理、异常管理等多个方面的知识。掌握这些核心技能,不仅能够提升个人编程能力,还能在实际项目中发挥重要作用。
Java后端将从RTSP源获取的视频流通过WebSocket推送到前端,`<video>`标签则负责实时解码并显示这些数据。 6. **录像功能**:项目可能使用JavaCV库来捕获视频流,并将其保存为本地文件。FFmpeg可以在此过程中帮助...
首先检查输入的字符串是否为空,然后使用`getBytes()`方法获取字符串的GBK编码字节数组,再通过`new String()`构造一个新的字符串,指定其编码为ISO-8859-1。如果在转换过程中出现异常,返回空字符串。 25-43行:`...
例如,可以执行一个JavaScript脚本来获取网页的canvas元素,然后调用`toDataURL()`方法将canvas内容转换为Base64编码的图像数据。 5. **处理图像数据**:在Java端接收到Base64编码的图像数据后,将其解码并保存为...
### JSP用户提交页面编码 在Java Web开发中,尤其是使用JSP(JavaServer Pages)技术进行网页开发时,处理用户提交的数据是非常重要的一个环节。其中,数据编码问题尤为关键,因为错误的编码设置可能会导致乱码问题...
在Java Web开发中,编码问题始终是一个常见的挑战,特别是涉及到JSP页面时。JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,以实现服务器端的数据处理和逻辑控制。然而,由于...
Java CED文档转PDF是一个技术话题,涉及到Java编程语言、CED文档格式以及PDF转换技术。在本文中,我们将深入探讨这些关键概念,并提供一个详细的知识框架。 首先,让我们了解一下CED文档。CED(Computer Editable ...
总结一下,根据URL获取页面截图是通过Java的`java.net.URL`和`java.awt.Robot`类实现的,它可以方便地获取并保存网页的视觉表示。这个功能在很多应用场景中都十分有用,比如自动化测试中验证网页布局,或者用于数据...
JavaScript库如jQuery提供了方便的API来发送异步请求到服务器获取新验证码,并更新页面上的验证码图片。 5. **响应与重定向**: - **HTTP响应**:服务器生成新验证码后,会构建一个包含验证码的HTTP响应,并返回给...
### Java编码规范详解 #### 一、概述 Java作为一种广泛使用的编程语言,其代码质量直接影响着软件项目的可维护性、可读性和可扩展性。为了提高团队协作效率,确保代码风格一致并符合最佳实践,制定统一的Java编码...
Java ICEpdf是一个开源的PDF库,它允许开发者在Java应用程序中...以上就是使用Java ICEpdf库进行PDF转图片的基本步骤和注意事项。通过熟练掌握这些知识点,你可以在自己的项目中实现高效且准确的PDF到图片转换功能。
Java编程中的中文问题源于字符编码的不匹配,主要体现在以下几个方面: 1. **操作系统与Java的编码差异**:早期的计算机系统多采用单字节编码,如ASCII,但随着Unicode的普及,Java语言内部使用Unicode编码,以支持...
- **一次转码**:使用`encodeURI()` 对URL进行编码,然后在服务器端使用适当的解码方法,如Java中的`new String(name.getBytes("ISO-8859-1"), "UTF-8")`,确保从ISO-8859-1转回UTF-8。 - **二次转码**:先使用`...
在Struts框架中,JSP用于前端展现,Servlet 用于控制,Action 用于处理前端页面JSP发来的请求,请求参数通过ActionForm进行传递,Action 在获得请求后通过调度业务系统提供的Spring service bean做处理,最后将处理结果...