Как сохранить кодирование в аргументе при использовании MessageFormat на Java

StackOverflow https://stackoverflow.com/questions/8345796

  •  27-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать MessageFormat следующим образом,

String downloadsUrl = "http://host/downloads?tags={0}";
Object[] formatArgs = {"sequence%20diagram"};
String url = new MessageFormat(downloadsUrl).format(formatArgs);

Однако, когда я смотрю на конечную строку URL, это так,http: // host/downloads? Tags = последовательность диаграмма

Есть ли что -нибудь, чтобы сохранить %20 и не иметь сообщения MessageFormat заменить его на пространство?

Это было полезно?

Решение

Предоставленный вами код не добавляет пространство, вышеуказанное код возвращает "http: // host/загрузки? Tags = sequence%20diagram"

Ваш целевой сервлет делает замену. Что бы ни было намечено «/Загрузки», чтобы анализировать параметр тегов и выполнять декодирование URL. Вы можете реконструировать возможные кодировки следующим образом. Вам нужно будет справиться с UnsupportedEncodingException в следующем.

String encoded = URLEncoder.encode( request.getParameter( name ), "UTF8" );

К сожалению, это только возможное кодирование, и по умолчанию преобразует пространства в «+». Чтобы вернуть «%20», вам нужно будет прибегнуть к

encoding = encoding.replaceAll( "+", "%20" );

Это может работать для вас или нет. В общем, более целесообразно нормализовать декодированное значение вместо кодированного значения, поскольку существует много возможных кодировки на декодированное значение.

Другие советы

На основе это Я предполагаю, что поместить отдельные цитаты вокруг значения, будет работать ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top