Как сохранить кодировку в аргументе при использовании MessageFormat в Java - PullRequest
0 голосов
/ 01 декабря 2011

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

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

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

Есть ли способ сохранить% 20 ​​и не заменить MessageFormat пробелом?

Ответы [ 2 ]

0 голосов
/ 01 декабря 2011

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

0 голосов
/ 01 декабря 2011

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

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

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

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

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

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

...