Как сохранить кодирование в аргументе при использовании MessageFormat на Java
-
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" );
Это может работать для вас или нет. В общем, более целесообразно нормализовать декодированное значение вместо кодированного значения, поскольку существует много возможных кодировки на декодированное значение.
Другие советы
На основе это Я предполагаю, что поместить отдельные цитаты вокруг значения, будет работать ...