Linux下pager-taglib分页中文搜索乱码

来源:互联网 发布:网络摄像头搜不到ip 编辑:程序博客网 时间:2024/05/18 01:56

【问题描述】本人平时在Windows编程部署,使用的pager-taglib-2.0.jar是maven自动下载的,如果分页的同时提供搜索框进行中文搜索没有问题。

后来,项目部署上线,环境是Unbuntu14.04LTS、nginx、tomcat8.0.30、jdk1.8,在中文搜索分页显示的页面中,搜索中文后,“上一页”、“下一页”等链接中的中文参数变成"?"。


【解决过程】

1、乱码多是由于各种对中文的编解码不一致导致的,按顺序如下:浏览器、js拦截、tomcat的conf.xml配置编码、项目中web.xml配置的编码拦截器、mysql编码,还有其他如页面编码、文件编码、项目编码等。按这个来一个一个排除后发现问题仍未解决。


2、仔细检查分页的链接,发现,输入中文点击搜索后的所有分页链接中,“首页”的链接的中文参数是正常的。感觉像发现了新大陆。。。果断上网搜索“pager-taglib 中文搜索 乱码”,出来的结果与我想的一样,官方提供的pager-taglib-2.0.jar会对参数进行编码,格式是System.getProperty("file.conecding")。代码如下:

com.jsptags.navigation.pager.PagerTag代码,调用java.net.URLEncoder.encode对参数进行编码。

<pre name="code" class="java">final void addParam(String name, String value) {    name = URLEncoder.encode(name);    value = URLEncoder.encode(value);    ......}


java.net.URLEncoder代码,根据获取的file.encoding对参数进行编码。

static{    difltEncName = AccessController.doPrivileged(new GetPropertyAction("file.encoding");}public static String encode(String s){    String str = null;    try{        str = encoding(s, dfltEncName);    }catch(UnsupportedEncodingException e){    }    return str;}


3、如上代码所示,只需将PagerTag.addParam的对参数编码的代码删掉即可。自己下了源包修改后,却不知道怎么编译,留坑。在线上更换了从网上下载的pager-taglib-2.0.jar,重新启动tomcat,搜索分页正常。


0 0