Кодирование / декодирование странная проблема - PullRequest
0 голосов
/ 07 октября 2009

Эта строка кода, которая декодирует закодированное китайское слово:

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 ]

2 голосов
/ 07 октября 2009

Кажется, что JBoss использует другую кодировку по умолчанию, которая не может представлять все символы в вашей строке. Вы, вероятно, должны использовать getBytes("UTF-8").

0 голосов
/ 07 октября 2009

Я не знаю, почему есть разница (которая зависит от конкретной среды Java, которую вы используете), но я могу сказать вам, что это за разница:

В вашей строке 15 байт. Эти байты представляют 5 символов Юникода по 3 байта каждый.

Вы можете сказать, потому что первый байт 3-байтового символа UTF-8 всегда начинается с шестнадцатеричного "E".

...