用HttpClient解析HTML时遇到的乱码问题

Http目前是Internet上使用最多的协议,HttpClient结合java能够发挥很好的功能。因此,我在解析HTML时,采用了HttpClient来完成的。

在解析HTML之前,对于乱码的问题我知之甚少。当我遇到时,真的把我难住了。因此,希望本文能够帮住大家。

下图是我做的一个小软件(该软件主要是抓取网页中的图书的信息

遇到的第一个乱码问题(gbkutf-8):

             目前而言,HTML使用的编码大多数是utf-8MyEclipse中控制台采用的则是GBK。而我的MyEclipse的编码采用的则是utf-8

       因此当我运行下例代码时的运行情况:

package com.cqcet.test;

import java.io.UnsupportedEncodingException;
import java.util.Scanner;

public class codeprob {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner read = new Scanner(System.in);
		
		System.out.println("请输入关键字:");
		String str = read.nextLine();
		
		System.out.println(str);
	}

}

当我输入“中国人”时:

下面给出解决方法

package com.cqcet.test;

import java.io.UnsupportedEncodingException;
import java.util.Scanner;

public class codeprob {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner read = new Scanner(System.in);
		
		System.out.println("请输入关键字:");
		String str = read.nextLine();
		
		try {
			System.out.println(new String(str.getBytes("gbk"),"utf-8"));
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

再看结果:


       转码到成功了,但为什么最后一个汉字是问号呢?

       因为java是以gbk方式解码的,因此,如果一对汉字字节不符合gbk编码规范,则每个字节使用‘?’(ascii 63)代替,即当汉字字符串最一位是奇数时,则变成问号。(大家可以尝试下)



遇到第二个乱码问题(获取HTML页面时

       因为http://222.180.192.5:8989/opac2/open/是采用utf-8,如下图

             

       MyEclipse代码默认编码则是GBK,因此,当我把解析的数据数据时,如下图

             

       如果把设置为utf-8,解析数据如下图

             


       因此,在做代码开发时,一定要把编码设置好



遇到第三个乱码问题(URI中的关键字不能出现中文

       什么是URI中的关键字不能出现中文?如下图

private static String uri = "http://222.180.192.5:8989/opac2/open/searchResults.htm?action=simpleSearch&bookType=0&location=&key=中文¤tPage=0";


       如果URI中的关键字出现中文后,会出现什么情况呢?如下图


       对,就是报异常了,为什么会出现报异常了呢?经过我多次百度,终于弄懂了它。

现在我们来分析下:

       URI的作用是标识资源,标识的含义是用不同的符号标示不同的资源,以便不同的资源可互相区别。而为了在各种各样的机器上都能够输入、存储、解析和交换URIURI只使用非常有限的字符,即ASCII字符集中的一个子集。但是,实际应用的URI往往要使用非ASCII字符,例如一个中文网页,因此,URI中可能存在汉字。对于这种情况,URI是如何处理的呢?在URI中的汉字,如采用的编码是UTF8时,则每个汉字对应3字节,用十六进制数表示每个字节,如下图

因此,要解决此问题的话,看如下代码

String name = java.net.URLEncoder.encode("中文", "utf-8");
即引用java.net.URLEncoder中的encode方法对需要的汉字就进行转码。

由于本人第一次写技术文章,如有错误,请留言给我,谢谢。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值