HMTLParser EncodingChangeException: character mismatch

本文介绍了解析HTML时遇到的字符集冲突问题及解决方案,通过设置正确的字符集避免异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

解析HTML,htmlparser是一个不错的选择,但是如果你初次使用,可能会不经意间遇到下面这个问题:

org.htmlparser.util.EncodingChangeException: character mismatch (new:  [0xfeff] != old:  [0xefï]) for encoding change from ISO-8859-1 to UTF-8 at character offset 0

 

这个问题的原因是服务器端返回的字符集是ISO-8859-1,但是在你解析的网页中却有下面这么一句话:

 

Html代码 复制代码  收藏代码
  1. <head>  
  2.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  3.     <title>欢迎光临</title>  
  4. </head>  
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>欢迎光临</title>
</head>

 

head中的charset=UTF-8与ISO-8859-1产生了冲突,所以就抛出了上述的异常。

 

对于这个问题网友已经给出了很多解决方案,包括修改htmlparser源代码等。

但是通过显式的为htmlparser设置字符集是可以解决这一问题的。

 

Java代码
  1. Parser parser = new Parser(url);   
  2. parser.setEncoding("UTF-8");   
  3. NodeList nodeList = parser.parse(new TagNameFilter("title"));   
  4. String title = nodeList.size() > 0  ? nodeList.elementAt(0).getFirstChild().getText() : null;  
Parser parser = new Parser(url);
parser.setEncoding("UTF-8");
NodeList nodeList = parser.parse(new TagNameFilter("title"));
String title = nodeList.size() > 0  ? nodeList.elementAt(0).getFirstChild().getText() : null;

通过显式的设置encoding为UTF-8可以解决这一问题,即使在网页的head中charset是GBK或者gb2312等。

 

注:我没有完全测试过所有的情况,所以如果您遇到同类问题,使用该方式无法解决,请加comment,非常感谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值