在Java中使用MessageFormat时,如何在参数中保留编码

时间:2011-12-01 17:40:44

标签: java messageformat

我正在尝试使用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 :(得分:0)

您提供的代码不会添加上面代码返回的空间“http:// host / downloads?tags = sequence%20diagram”

你的目标servlet正在进行替换。无论是什么“/ downloads”被映射到解析tags参数并执行url解码。您可以按如下方式重建可能的编码。您将需要处理以下的UnsupportedEncodingException。

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

不幸的是,这只是一种可能的编码,默认情况下会将空格转换为“+”。要获得“%20”,您需要诉诸

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

这可能对你有用。通常,建议对解码值而不是编码值进行归一化,因为每个解码值有许多可能的编码。

答案 1 :(得分:0)

基于this我会猜测在这个值附近加上单引号会起作用......