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,如何?

4

2 回答 2

2

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

于 2009-10-06T21:07:50.100 回答
0

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

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

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

于 2009-10-06T21:11:25.667 回答