Spring3 传递URL参数中文乱码的问题


项目中用到一个spring3的接口,地址这种形式:http://localhost:8080/suzhou/service/searchBooks?queryString=测试

但是由于是中文输入,后台获取数据时解析一直不正确,网上查阅了很多资料,最多的一种说法是:

queryString = new String(queryString.getBytes("ISO-8859-1"), "UTF-8");

但是这种方法对我没用,一直想不通,尝试了各种方式,可返回的都是“???”这种问号形式

直到我看到一篇文章,讲的是JAVA中各种编码的转换,说到转换成GBK时候会产生问号,于是我把代码改成

queryString = new String(queryString.getBytes("ISO-8859-1"), "GBK");

奇迹出现了!这次返回的正确了。

但是为什么GBK就对了呢?我总结了下,这是由于我的系统默认编码是GBK的缘故。

查看系统默认编码可以通过下面的代码来执行:Charset.defaultCharset()

因此更通用的解决方式是:queryString = new String(queryString.getBytes("ISO-8859-1"), Charset.defaultCharset());

就可以了!

看到现在网上很多文章都是抄来抄去感觉很莫名其妙,一看到乱码就是new String(queryString.getBytes("ISO-8859-1"), "UTF-8");要么就是让别人修改tomcat里面的server.xml,根本没好好考虑过为什么要这么改,UTF-8不是万金油,用它是有原因的。如果你的系统默认是GBK的,那么你强行用UTF-8转码,只会越转越乱。

/**
	 * 根据字段名搜索
	 * @param queryString
	 * @return
	 */
	@RequestMapping(value="/searchBooks",method=RequestMethod.GET)
	public @ResponseBody List<BookInfo> searchBooks(@RequestParam("queryString") String queryString) throws Exception {
		System.out.println("queryString----------------->"+queryString);
		queryString = new String(queryString.getBytes("ISO-8859-1"), Charset.defaultCharset());
		System.out.println("queryString----------------->"+queryString);
		BookDao dao = new BookDaoImpl();
		List<BookInfo> list = dao.searchBooks(queryString);
		return list;
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值