2009-09-02 81 views
2

我真的被java的字符串編碼阻止。 它有很多自動轉換。我找不到正規的。 任何人有好主意? 例如: 在JSP頁面中,也有這樣的鏈接如何處理java中的字符串編碼?

http://localhost:8080/helloworld/hello?world=凹ㄉ 

然後,我們需要處理它,所以我們這樣做:

String a = new String(request.getParameter("world").toString().getBytes("ISO-8859-1"), 
         "UTF-8"); 
a = "http://localhost/" + a; 

當我調試它,我發現了一個是對的。

然後我將它傳遞給會話對象: request.getSession()。setAttribute(「hello」,a);

後來在編碼爲「Big5」的jsp頁面中,我嘗試獲取屬性並顯示, 而且我發現字符「凹陷」已損壞。

我該如何解決這個問題?

回答

12

這不是你在字符集之間轉換的方式。你需要擔心的是這一部分:

request.getParameter("world").toString().getBytes("ISO-8859-1") 

一旦你把它作爲一個字符串,它在內部爲16位Unicode存儲。以字節的形式獲取它,然後告訴java將這些字節視爲UTF-8,這樣做不會有什麼好處。

如果您發現它很好,那只是一個巧合。一旦你調用getParameter(「world」)。toString(),你就有了你的unicode字符串。進一步的解碼和編碼只會破壞某些字符,只是碰巧不會破壞你的。

問題是如何讓該屬性稍後顯示?你說jsp頁面的編碼不是unicode,而是Big5,所以你怎麼做才能將該字符串從屬性映射中取出並放在該頁面上?這是問題的可能來源。鑑於對如何處理獲取參數中的字符轉換的誤解,很可能該Big5頁面上也存在一些錯誤。

順便說一下,你真的需要使用Big5嗎? UTF-16會工作嗎(如果不是UTF-8)?這當然可以消除一些頭痛。

+0

是的,我需要使用大5。 – MemoryLeak 2009-09-02 03:54:41

-1

下面的代碼將工作

String a = new String(request.getParameter("world").toString().getBytes("ISO-8859-1"), 
         "UTF-16");