2011-04-21 23 views
1

我有一個jsf應用程序,有國際用戶,所以形式輸入可以有像漢字和中國的非西方字符串 - 如果我打我的網址與..?q =東日本大頁面上的輸出是正確的,我看到q在我的表單輸入得到填充罰款。但是,如果我將相同的字符串輸入到表單中並提交,我的應用程序會在使用url中的填充參數構造url之後執行重定向(看起來多餘,但這是由於第三方集成),但重定向不是編碼正確的字符串。我有response.sendredirect與外國字符的網址 - 如何編碼?

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

但URL重定向結束是Q = ????我在String構造函數中使用了各種編碼字符串(在ISO和UTF-8中切換,並且在url中只是得到了一堆亂碼),但沒有一個可以用於我獲得的位置q =東日本大任何想法我需要做的是讓q =東日本大人在重定向中正確填充?謝謝。

回答

0

你如何讓你的url? URI中不能直接包含非ASCII字符;他們必須轉換成字節(使用特定的編碼),然後%編碼。

URLEncoder.encode應該給出一個編碼參數,以確保這是正確的編碼。否則,你會得到默認編碼,這可能是錯誤的,總是要避免。

String q= "\u6771\u65e5\u672c\u5927"; // 東日本大 

String url= "http://example.com/query?q="+URLEncoder.encode(q, "utf-8"); 
// http://example.com/query?q=%E6%9D%B1%E6%97%A5%E6%9C%AC%E5%A4%A7 

response.sendRedirect(url); 

該URI將在瀏覽器地址欄中顯示爲IRI的'http://example.com/query?q=東日本大'。

確保您(使用Content-Type頭/元),並解釋查詢字符串輸入爲UTF-8服務你的網頁爲UTF-8(特定服務器;見this faq爲Tomcat)

+0

感謝bobince - 是的,只是使用URLEncoder.encode(q,「UTF-8」),而不是直接將字符串弄亂,我自己解決了它。 – James 2011-04-26 21:05:52

0

嘗試

response.setContentType("text/html; charset=UTF-16"); 
response.setCharacterEncoding("utf-16"); 
+0

試過了(添加了這兩行,並拿出了我的url編碼行),並在重定向的url上得到了ä½è¤æ¿¹¹(這與我對編碼無所作爲時得到的輸出相同,只是調用sendRedirect)。然後嘗試改變你的2線使用UTF-8並得到了æ±æ¥æ¬å¤§§,所以仍然不知道如何讓它正確重定向。 – James 2011-04-21 18:11:27

+0

嗯。然後在兩行中而不是UTF-16中嘗試「Shift_JIS」。 – Gabriel 2011-04-21 22:11:28