这行代码,用于解码编码的中文单词:
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 :(得分:2)
似乎JBoss使用的是不同的默认编码,它不能代表字符串中的所有字符。您应该使用getBytes("UTF-8")
。
答案 1 :(得分:0)
我不知道为什么会有差异(这取决于您正在运行的特定Java环境),但我可以告诉您这是什么区别:
字符串中有15个字节。这些字节代表5个Unicode字符,每个字符3个字节。
你可以说,因为3字节UTF-8字符的第一个字节总是以十进制“E”开头。