Java эквивалентен JavaScript encodeURIComponent, который производит идентичный вывод? - PullRequest
83 голосов
/ 03 марта 2009

Я экспериментировал с различными фрагментами Java-кода, пытаясь придумать что-то, что будет кодировать строку, содержащую кавычки, пробелы и «экзотические» символы Unicode, и производить вывод, идентичный функции JavaScript encodeURIComponent .

Моя строка теста на пытки: "A" B ± "

Если я введу следующий оператор JavaScript в Firebug:

encodeURIComponent('"A" B ± "');

- Тогда я получаю:

"%22A%22%20B%20%C2%B1%20%22"

Вот моя маленькая тестовая Java-программа:

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class EncodingTest
{
  public static void main(String[] args) throws UnsupportedEncodingException
  {
    String s = "\"A\" B ± \"";
    System.out.println("URLEncoder.encode returns "
      + URLEncoder.encode(s, "UTF-8"));

    System.out.println("getBytes returns "
      + new String(s.getBytes("UTF-8"), "ISO-8859-1"));
  }
}

- Эта программа выводит:

URLEncoder.encode returns %22A%22+B+%C2%B1+%22
getBytes returns "A" B ± "

Близко, но без сигары! Каков наилучший способ кодирования строки UTF-8 с использованием Java, чтобы он выдает тот же вывод, что и JavaScript encodeURIComponent?

РЕДАКТИРОВАТЬ: Я использую Java 1.4 для перехода на Java 5 в ближайшее время.

Ответы [ 12 ]

0 голосов
/ 22 мая 2015

Я успешно использовал класс java.net.URI следующим образом:

public static String uriEncode(String string) {
    String result = string;
    if (null != string) {
        try {
            String scheme = null;
            String ssp = string;
            int es = string.indexOf(':');
            if (es > 0) {
                scheme = string.substring(0, es);
                ssp = string.substring(es + 1);
            }
            result = (new URI(scheme, ssp, null)).toString();
        } catch (URISyntaxException usex) {
            // ignore and use string that has syntax error
        }
    }
    return result;
}
0 голосов
/ 25 мая 2012

Я обнаружил класс PercentEscaper из библиотеки google-http-java-client, который можно довольно легко использовать для кодирования кода.

PercentEscaper от gav-http-java-client javadoc google-http-java-client home

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...