网上已经有很多关于解决乱码问题的帖子,在这里我所说的是解决cache(网页快照)页面的乱码的问题,而且网页快照乱码解决后,是支持各类编码的网页都能正常显示,而不再出现乱码。原来的文章都是只针对一种编码,例如utf-的页面显示正常,但是GBK的就会出现乱码
原来的修改:
content=new string(bean.getcontent(details));
修改为:content=new string(bean.getcontent(details),"utf-8")
这样处理,则会出现gb2312,gbk编码的网页出现乱码,其它类编码的网页都会显示正常。
还有一些文章是对Metadata修改parseDate的contentmeta来实现获取正确的编码方式,这个思路是非常正确的,但是还是有一点问题,仍然会存在一些gb2312的页面出现乱码,我对代码又进行了修改和测试,最终发现一个最简单的办法
完整代码如下:
修改cache.jsp
ParseData ParseData = bean.getParseData(details);
String content = null;
String contentType = ParseData.getMeta(Metadata.CONTENT_TYPE);
if (contentType.startsWith("text/html")) {
// FIXME : it's better to emit the original 'byte' sequence
// with 'charset' set to the value of 'CharEncoding',
// but I don't know how to emit 'byte sequence' in JSP.
// out.getOutputStream().write(bean.getContent(details)) may work,
// but I'm not sure.
String encoding = ParseData.getMeta("CharEncodingForConversion");
if (encoding != null) {
try {
content = new String(bean.getContent(details), encoding);
}
catch (UnsupportedEncodingException e) {
// fallback to windows-1252
content = new String(bean.getContent(details), "windows-1252");
}
}
else
content = new String(bean.getContent(details),"GBK");
}
经测试,所有页面都正常显示,无乱码了。