liunx 上get 不到url参数 java_URL传递中文参数,大坑一枚,Windows与Linux效果竟然不一致...
下午,計(jì)劃2個(gè)小時(shí)搞定,個(gè)人官網(wǎng)第6次升級(jí),就可以干點(diǎn)輕松的事了,結(jié)果,下午多搞了2個(gè)小時(shí),晚上又搞了2個(gè)小時(shí),才搞定。最后一個(gè)世界難題是,URL傳遞中文參數(shù)。問題大致是這么出現(xiàn)的:我為“博客雷觀”?這個(gè)欄目,增加了“全文搜索”功能,用lucene實(shí)現(xiàn)的。因此,需要傳遞中文參數(shù)。搜索框表單提交,傳遞中文,很簡單就搞定了。? ?搜索之后的分頁url,需要帶上當(dāng)前的“搜索詞”?,比如“程序員”,我在本地很輕松就搞定了。無非就是這樣:search/search.html?keyword=${keyword}"? keyword就是中文詞匯,比如“程序員”。? ?我本以為,扔到服務(wù)器上,重啟一次,就萬事大吉了,結(jié)果點(diǎn)擊第2頁的時(shí)候,沒有搜索到任何文章。查看日志,發(fā)現(xiàn)搜索詞是“亂碼” 。? 我第一反應(yīng)是,傳遞的中文“程序員”?沒有正確地進(jìn)行url編碼,所以:
把搜索詞編碼之后,再附帶在Url之后,但是:Windows本地環(huán)境,ok,worked。但是,線上Linux環(huán)境,仍然不行。圍繞著是否正確了編碼,在QQ、Chrome、IE上反復(fù)嘗試了N次。結(jié)果,無論是否進(jìn)行url編碼,本地Windows的所有瀏覽器都能夠正常地傳遞中文參數(shù),線上Linux都失敗。既然不是URL編碼的問題,我覺得應(yīng)該是中文編碼的問題。(在初學(xué)JavaWeb開發(fā)的第1年,遇到了各種各樣的編碼問題,所以現(xiàn)在很有經(jīng)驗(yàn)了。)
String a = "?¨??o????";
byte[] b = a.getBytes("iso8859-1");
System.out.println(new String(b, "utf-8"));最終打印出來的是“程序員” ,這充分說明,linux線上環(huán)境是由于“中文編碼解碼不一致”導(dǎo)致的“亂碼問題”。
@RequestMapping("search")
public String search( String keyword)。最開始,我仍然搞錯(cuò)了一點(diǎn),以為keyword還是url編碼,還需要一次解碼。后來發(fā)現(xiàn),SpringMVC接收參數(shù)的時(shí)候,會(huì)自動(dòng)進(jìn)行url解碼,這個(gè)時(shí)候的keyword已經(jīng)是“字符”?了。我的解決方法:
log.info("searchKey=" + keyword);
searchService.search(luceneIndexDir, keyword, pageVo);
//可能是參數(shù)亂碼導(dǎo)致的
if (pageVo.getTotalCount() <= 0) {
//瀏覽器發(fā)送的中文參數(shù)雖然是url編碼的,但是spring也會(huì)自動(dòng)解碼,之所以亂碼,應(yīng)該是url編碼和url解碼的“字符集編碼”不同導(dǎo)致的。
//如果遇到這種情況,線上linux遇到了,再把iso5559-1的字符串轉(zhuǎn)換為utf-8的
log.info("search url iso8859-1,when in is:"+keyword);
byte[] b =keyword.getBytes("iso8859-1");
keyword=new String(b, "utf-8");
searchService.search(luceneIndexDir, keyword, pageVo);
log.info("search url iso8859-1,when out is:"+keyword);
}如果第一次,沒有查詢到任何結(jié)果,很有可能就是“中文亂碼”,再轉(zhuǎn)換成正確的字符,再查詢一次。
我的這種方法,真心不是最好的。但是,我暫時(shí)沒能嘗試出萬能的一次性解法,Windows上正常,Linux不正常,很難搞。只能,通過2次查詢來確保,不是由于亂碼,查詢不到內(nèi)容。
原文:http://blog.csdn.net/fansunion/article/details/41929563
總結(jié)
以上是生活随笔為你收集整理的liunx 上get 不到url参数 java_URL传递中文参数,大坑一枚,Windows与Linux效果竟然不一致...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: console用法java_使用cons
- 下一篇: java 缘起_缘起 网络编程