关于htmlparsr在显示繁体中文时出现乱码的原因分析和解决方法
来源:互联网 发布:hadoop传统数据数仓 编辑:程序博客网 时间:2024/06/09 18:52
最近发现用htmlparser解析一些网页时,繁体中文会变成乱码.分析了下原因,发现在用stringbean的时候htmlparser会自己根据meta来决定用哪种内码来解码,而有的网站在meta中是用gb2312来做charset,实际应用的时候又用到了gbk.gb2312是不能表示繁体的,所以就出现了乱码.解决的办法很简单,gbk是兼容gb2312的,所以在htmlparser的page.java的getcharser()那里加一句判断,如果ret是gb2312就设置为gbk,这样问题就解决了.
修改的page.java的代码如下(/lexer/page.java)
public String getCharset (String content)
{
final String CHARSET_STRING = "charset";
int index;
String ret;
if (null == mSource)
ret = DEFAULT_CHARSET;
else
// use existing (possibly supplied) character set:
// bug #1322686 when illegal charset specified
ret = mSource.getEncoding ();
if (null != content)
{
index = content.indexOf (CHARSET_STRING);
if (index != -1)
{
content = content.substring (index +
CHARSET_STRING.length ()).trim ();
if (content.startsWith ("="))
{
content = content.substring (1).trim ();
index = content.indexOf (";");
if (index != -1)
content = content.substring (0, index);
//remove any double quotes from around charset string
if (content.startsWith ("/"") && content.endsWith ("/"")
&& (1 < content.length ()))
content = content.substring (1, content.length () - 1);
//remove any single quote from around charset string
if (content.startsWith ("'") && content.endsWith ("'")
&& (1 < content.length ()))
content = content.substring (1, content.length () - 1);
ret = findCharset (content, ret);
// Charset names are not case-sensitive;
// that is, case is always ignored when comparing
// charset names.
// if (!ret.equalsIgnoreCase (content))
// {
// System.out.println (
// "detected charset /""
// + content
// + "/", using /""
// + ret
// + "/"");
// }
}
}
}
if(ret.equalsIgnoreCase("gb2312"))ret="GBK"; //to avoid decode problem
//edited by linyunfan
return (ret);
}
在最后加入了这句
if(ret.equalsIgnoreCase("gb2312"))ret="GBK";
- 关于htmlparsr在显示繁体中文时出现乱码的原因分析和解决方法
- 关于jsp乱码问题的解决。和出现原因
- ID3DXFont显示乱码的原因及解决方法
- visual studio繁体中文乱码解决方法
- 解决弹出OUTLOOK显示繁体中文乱码的问题
- windows项目导入到ubuntu系统下出现中文乱码的原因和解决方法
- get请求时候参数中含有“中文”字段出现乱码问题的原因和解决方法
- 数据库出现乱码的原因和解决办法
- minigui繁体中文的显示
- java客户端出现乱码的原因及解决方法
- scp出现stalled的原因和解决方法
- 线程安全问题出现的原因和解决方法
- 出现乱码的原因
- 关于在使用rowid和rownum时遇到ORA-01446错误的原因即解决方法。
- 关于在ASP 中简体中文和繁体中文的转换 的函数
- Code:Blocks 中文乱码问题原因分析和解决方法!
- Code:Blocks 中文乱码问题原因分析和解决方法
- Code:Blocks 中文乱码问题原因分析和解决方法!
- 暴笑~~历史上还真有秀字营这样的部队~
- 吴宗宪恶搞徐静蕾宋祖德黄健翔李湘
- 谷歌“不人工干预搜索结果”真相调查
- 新政施行 搜索引擎惊喜侵权官司止于"避风港"
- 递归法删除目录的类
- 关于htmlparsr在显示繁体中文时出现乱码的原因分析和解决方法
- PHP读取,写入MYSQL数据库文件操作
- 清明
- PHP页面之间传递多个参数
- 飞越无限工作室辅导计算机电子系的毕业设计
- require()和include()函数的基本区别
- 发一个自己用JS写的实用看图工具
- 用ant包实现zip文件解压的类
- IT人士群聚喝酒的讲究