java获取页面编码
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.baidu.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; } }
java获取页面编码的更多相关文章
- java 获取页面中的 a 标签 的 href 实例
Pattern p = Pattern.compile("<a\\s+href\\s*=\\s*(\"|\')?(.*?)[\"|\'|>]", P ...
- java获取字符串编码和转换字符串编码
public class EncodingUtil { // 这里可以提供更多地编码格式,另外由于部分编码格式是一致的所以会返回 第一个匹配的编码格式 GBK 和 GB2312 public stat ...
- Java获取字符串编码方式
直接下载吧: http://files.cnblogs.com/files/xiluhua/BytesEncodingDetectTool.rar
- C# -- WebClient自动获取web页面编码并转换
C# -- WebClient自动获取web页面编码并转换 抽个时间,写篇小文章,最近有个朋友,用vb开发一个工具,遇到WebClient获取的内容出现乱码,可惜对vb不是很熟悉,看了几分钟vb的语法 ...
- Java 网络爬虫获取页面源代码
原博文:http://www.cnblogs.com/xudong-bupt/archive/2013/03/20/2971893.html 1.网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网 ...
- java获取天气预报的信息
运行效果: 主要功能: 1,jsp页面输入省份和城市 根据条件获取当地的天气信息 2,java代码 利用第三方的省份和城市的路径地址 本工程主要实现java获取天气预报的信息步骤1,创建工程weath ...
- java设置字符串编码、转码
Unicode(统一码.万国码.单一码)是计算机科学领域里的一项业界标准,包括字符集.编码方案等.Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一 ...
- Java获取URL对应的资源
Java获取URL对应的资源 认识IP.认识URL是进行网络编程的第一步.java.net.URL提供了丰富的URL构建方式,并可以通过java.net.URL来获取资源. 一.认识URL ...
- js/java 获取、添加、修改、删除cookie(最全)
一.cookie介绍 1.cookie的本来面目 HTTP协议本身是无状态的.什么是无状态呢,即服务器无法判断用户身份.Cookie实际上是一小段的文本信息(key-value格式).客户端向服务 ...
随机推荐
- Hashtable HashMap
Hashtable和HashMap类有三个重要的不同之处.第一个不同主要是历史原因.Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现. ...
- 简析 addToBackStack使用和Fragment执行流程
在使用Fragment的时候我们一般会这样写: FragmentTransaction transaction = getSupportFragmentManager().beginTransacti ...
- JS 判断当前使用浏览器名及版本
由于我的后台系统的上传图片不支持IE浏览器的,所以我需要判断公司人员在使用后台系统的时候,是否使用的浏览器是IE的. // 获取当前浏览器名 及 版本号 function appInfo(){ var ...
- CTEX里的函数、符号及特殊字符
CTEX里的函数.符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{a} \acute{a} \check{a} \grave{a} \tilde{a} \hat ...
- OpenCV3编程入门笔记(6)自我验证各函数程序代码
// asw.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <opencv2/opencv.hpp> usi ...
- 机器学习与R语言
此书网上有英文电子版:Machine Learning with R - Second Edition [eBook].pdf(附带源码) 评价本书:入门级的好书,介绍了多种机器学习方法,全部用R相关 ...
- association ,collection
mybatis 出现这个错误Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 2 ...
- Unity 3D中的内存管理
本文欢迎转载,但烦请保留此行出处信息:http://www.onevcat.com/2012/11/memory-in-unity3d/ Unity3D在内存占用上一直被人诟病,特别是对于面向移动设备 ...
- Java线程(二):线程同步synchronized和volatile
上篇通过一个简单的例子说明了线程安全与不安全,在例子中不安全的情况下输出的结果恰好是逐个递增的(其实是巧合,多运行几次,会产生不同的输出结果),为什么会产生这样的结果呢,因为建立的Count对象是线程 ...
- JSON 换行、JSON \r\n、怎么处理 ?(转载)
参考地址: http://www.cnblogs.com/mamingbo/archive/2010/11/27/1889583.html 在最后json的字符串上:.Replace("\r ...