编码/解码奇怪的问题

时间:2009-10-06 20:55:49

标签: java unicode encoding urlencode decoding

这行代码,用于解码编码的中文单词:

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,怎么样?

2 个答案:

答案 0 :(得分:2)

似乎JBoss使用的是不同的默认编码,它不能代表字符串中的所有字符。您应该使用getBytes("UTF-8")

答案 1 :(得分:0)

我不知道为什么会有差异(这取决于您正在运行的特定Java环境),但我可以告诉您这是什么区别:

字符串中有15个字节。这些字节代表5个Unicode字符,每个字符3个字节。

你可以说,因为3字节UTF-8字符的第一个字节总是以十进制“E”开头。