2009-10-06 67 views
0

這行代碼,用於解碼編碼中國字:編碼/解碼奇怪的問題

URLDecoder.decode("%E4%BB%BB%E4%BD%95%E8%BD%A6%E8%BE%86%E5%BA%94", 
    "UTF-8").getBytes().length 

當我在JSP頁面中運行(在JBoss),它打印5:

<%= URLDecoder.decode("%E4%BB%BB%E4%BD%95%E8%BD%A6%E8%BE%86%E5%BA%94", 
     "UTF-8").getBytes().length %> 

在桌面應用程序打印15中運行它:

public static void main(String[] args) { 
    System.out.println(URLDecoder.decode(
     "%E4%BB%BB%E4%BD%95%E8%BD%A6%E8%BE%86E5%BA%94", "UTF-8" 
    ).getBytes().length); 
} 

爲什麼?我想讓jsp也得到15,怎麼樣?

+0

你確定嗎?仔細檢查是否有其他問題。你的整個JSP頁面是什麼樣的?是不是從15被隱藏的1個? JSP中的Java代碼只是普通的Java代碼,與servlet中的Java代碼完全相同(實際上,JSP將轉換爲servlet)。 – Jesper 2009-10-06 20:59:32

+0

JSP頁面不包含任何其他URLDecoder導入語句,我僅將它用於測試。 – Moro 2009-10-06 21:03:20

+0

不,它是5我正確地看到它。 – Moro 2009-10-06 21:04:48

回答

2

看起來像JBoss使用不同的默認編碼,這不能代表你的字符串中的所有字符。你應該使用getBytes("UTF-8")

0

我不知道爲什麼是有區別的(這取決於你所運行的特定Java環境),但我可以告訴你,有什麼區別:

有字符串中的15個字節。這些字節表示5個Unicode字符,每個字節爲3個字節。

由於3字節UTF-8字符的第一個字節總是以十六進制「E」開始,因此可以說明。