质量团队知识库

 找回密码
 立即注册
查看: 47|回复: 0

解决 jspwiki 快速搜索里的中文乱码

[复制链接]

14

主题

0

好友

342

积分

质量部成员

Rank: 9Rank: 9Rank: 9

发表于 2016-4-27 16:36:16 |显示全部楼层
本帖最后由 yangdl 于 2016-4-27 16:40 编辑

1、陈述现象
    初装的jspwiki快速搜索中文乱码,而查找页面中文不乱码

中文乱码

中文乱码

查找页面不乱码

查找页面不乱码



2、 原因探查
   1) 通过chrome 开发者工具探寻到快速搜索发送的url
   是向/ajax/search/pages提交了post请求
f12.png

  
   2) 通过web.xml文件了解到请求被分发到
     org.apache.wiki.ajax.WikiAjaxDispatcherServlet
  1.        <servlet>
  2.         <servlet-name>WikiAjaxDispatcherServlet</servlet-name>
  3.         <servlet-class>org.apache.wiki.ajax.WikiAjaxDispatcherServlet</servlet-class>
  4.         <load-on-startup>1</load-on-startup>
  5.     </servlet>
  6. <servlet-mapping>
  7.         <servlet-name>WikiAjaxDispatcherServlet</servlet-name>
  8.         <url-pattern>/ajax/*</url-pattern>
  9.         <url-pattern>/admin/ajax/*</url-pattern>
  10.     </servlet-mapping>
复制代码
3)通过查看WikiAjaxDispatcherServlet源代码(jspwiki是开源项目)了解到
     搜索结果集(url请求的回答)是在org.apache.wiki.search.SearchManager类的子类
    JSONSearch生成并写到response里的

生成结果

生成结果

   4)通过调试发现result里的中文是正常的,查看resp对象发现其编码是ISO-8859-1

编码

编码

   5)修改编码 resp.getWriter().write(result);之前添加resp.setCharacterEncoding("utf-8");则url返回json中文正常
3、原因分析
    (知识前提)tomcat默认编码是ISO-8859-1
    查找页面请求的url是jsp页面请求,而该页面有句<%@ page language="java" pageEncoding="UTF-8"%>
   会提示tomcat将response的字符集设置为utf-8 ,所以查找页面的内容没有乱码
    f19.png


  而快速搜索里的请求不是jsp页面,而是直接分发到servlet,而servlet并没有设置编码格式,所以response的字符编码是默认的ISO-8859-1,所以快速搜索的返回值乱码。

4、问题解决
     直接在JSONSearch类中设置字符集并不是个好方案,(当其他地方也碰到乱码是也要修改代码)
     使用filter来为response设置字符集(参考文末链接)。
5、结果
      1)在来部署的jspwiki的\WEB-INF\classes\目录下添加com.pillar.filter.UTF8Filter类

添加类

添加类

     2)修改\WEB-INF\web.xml文件,添加下面内容

web.xml修改

web.xml修改

    3)重启tomcat,查看结果
   

正确编码

正确编码

参考链接
http://blog.csdn.net/hengyunabc/article/details/17056237
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|Carnation

GMT+8, 2017-12-17 15:57 , Processed in 0.195868 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部