使用了oschina的架构,get方式获取中文参数总是乱码

FoxHu 发布于 2013/10/22 16:16
阅读 397
收藏 0

@tsl0922 你好,想跟你请教个问题:我使用了oschina的架构,用了oschina的RequestContext类和URLMappingFilter类等,velocity.properties配置也是参考oschina的

input.encoding=UTF-8
output.encoding=UTF-8


Tomcat的中URIEncoding="UTF-8"也设置了UTF-8,数据库的编码也是UTF-8,我在做搜索结果分页的时候获取用户的关键字参数,如果是中文总是乱码
search.vm文件如下:

#set($keywords =$link.param('q'))
#set($pageno = $link.param('p',1))
#set($page_size = 10)
#set($curr_uri = '?q='+ $link.endcodeUri($keywords))
#set($ret = $medicine_tool.searchResult($keywords,$pageno, $page_size))


其中link类代码如下:

public class LinkTool {

	public String param(String name, String...def_value) {
		if(RequestContext.get() == null || RequestContext.get().request() == null){
			return (def_value.length>0)?def_value[0]:null;
		}
		String v = RequestContext.get().request().getParameter(name);
		return (v!=null)?v:((def_value.length>0)?def_value[0]:null);
	}
	
	public static String endcodeUri(String uri) throws IOException{
		return URLEncoder.encode(uri,"UTF-8");
	}

}


当用户输入“当”时查询,是post提交,结果如下

当用户单击第二页是,地址栏出现的uri是http://localhost:8080/search?q=当&p=2
查询结果

就出现了乱码,如果查询英文则正常
我查了半天也找不到原因!还请赐教!谢谢!

加载中
0
tsl0922
tsl0922

为什么不使用现成的LinkTool呢,试试VelocityTools中的LinkTool会不会乱码?

<tool>
  <key>link</key>
  <scope>request</scope>
  <class>org.apache.velocity.tools.view.tools.LinkTool</class>
</tool>


oschina使用的LinkTool是继承自这个类的,并添加了一些自己的业务方法。

FoxHu
FoxHu
回复 @websketch : oschina已经公布了很多关键代码,你导入到Eclipse整合一下
websketch
websketch
@FoxHu 能不能他享一下整个代码
FoxHu
FoxHu
找到原因了,原来oschina的RequestContext类的_DecodeParamValue已经对经过tomcat的iso-8859-1编码进行了UTF-8转码,所以删除我在tomcat配置的URIEncoding="UTF-8"就行了,感谢@tsl0922 的耐心指导!
FoxHu
FoxHu
好的,我回头试一下,多谢
tsl0922
tsl0922
参考这里的getParam方法:http://www.oschina.net/code/snippet_12_2038
0
戴威
戴威
在 web 容器中设置 url encoding 为 utf-8
0
迷路的游侠
迷路的游侠
get方式获取中文,应该String newStr = newString(str.getBytes("ISO-8859-1"),"UTF-8")
南湖船老大
南湖船老大
+1
0
南湖船老大
南湖船老大

GET 请求也和浏览器相关,这个我以前测试过,情况比较复杂。我一般是用JS的URIencode函数统一编码后,再去后台转码的

2L的String newStr = newString(str.getBytes("ISO-8859-1"),"UTF-8"),楼主得灵活应用

0
淘淘我的小宝宝
淘淘我的小宝宝
老生常谈的问题 跟架构有啥关系呢
0
FoxHu
FoxHu
@红薯 得请教老大了!
loyal
loyal
纯基础问题,和框架没什么关系....别人都给你回答那么多了,你还喊 @红薯 他看不见...看不见...不见....见..
0
HostSugar
HostSugar

编码过滤器?


loyal
loyal
get和这个没关系
返回顶部
顶部