在 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 :
<!-- 省略字符集聲明,默認爲 iso-8859-1--> <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="18443" />
而服務器上的Tomcat 配置如下:
<!-- 聲明字符集 --> <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="18443" URIEncoding="UTF-8" />
修改過URIEncoding 後,問題解決。以後如果出現中文亂碼問題,而數據庫設置正常,應該想到確認 Tomcat 所使用的字符集。
完。
參考資料:
http://blog.csdn.net/hongqishi/article/details/7428380
本文出自 “細桶假狗屎” 博客,請務必保留此出處http://xitongjiagoushi.blog.51cto.com/9975742/1662527