2009-10-06 89 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”开始,因此可以说明。