在 J2EE 中用到了中文搜索,在后台接到的前台数据中出现了乱码,采用如下方式进行转码:
try { keyword = new String(cond.getKeyword().getBytes("iso-8859-1"),"utf-8");} catch(UnsupportedEncodingException ex) { ex.printStackTrace();}
这样在本地部署测试时解决了中文乱码导致的查询失败问题,然而当将项目部署到测试服务器上时却依然不起作用。由于除了中文,英文和数字可以搜索成功,因此可以推测依然是字符集问题。考虑到在前台发送Ajax 请求开始查询时仍未到达数据库,基本可以排除数据库字符集方面的配置问题,由于水平所限一直未能想到其他原因。后来发现在 Tomcat 中也有字符集的设置问题,经过比对,发现果然是因为本地与测试服务器Tomcat 配置不同而导致。
默认情况下,Tomcat 所采用的字符集为 iso-8859-1 :
而服务器上的Tomcat 配置如下:
修改过URIEncoding 后,问题解决。以后如果出现中文乱码问题,而数据库设置正常,应该想到确认 Tomcat 所使用的字符集。
完。
参考资料: