0

我正在尝试使用 spring 框架的 URIUtils 在 java 中对字符串进行 URIENcode。

据我了解,它应该很简单,但由于某种原因,字符串保持不变。

我有以下字符串:

http://www.foo.bar/foo/bar

我想对它进行URIEncode。

final String ENC = "UTF-8";
String uri = "http://www.foo.bar/foo/bar";
final String result = UriUtils.encodeFragment(uri, ENC);

结果是未编码的相同字符串。

我究竟做错了什么?

我怎样才能正确地对该字符串进行 URIEncode 以便在获取参数中使用它?

我不想使用 URLBuilder,因为我需要使用结果输出并为内部数据库创建哈希表。

谢谢你

4

2 回答 2

2

我认为您可以使用java.net.URLEncoder避免使用 spring 类来实现相同的目的

System.out.println(URLEncoder.encode("http://www.foo.bar/foo/bar", "UTF-8"))

会打印

http%3A%2F%2Fwww.foo.bar%2Ffoo%2Fbar
于 2013-05-28T12:54:18.160 回答
1

有一个 RFC 允许从不同的参数构建 URI:URI 模板

由于您使用 Java,因此恰好有一个可用的实现(免责声明:是的,它是我的)。

然后你可以这样做:

// The template
final URITemplate tmpl = new URITemplate("http://my.site/foo{?params*}");

// The query parameters
// Uses Maps from Guava since the lib depends on it
final Map<String, String> params = Maps.newHashMap();
params.put("site", "http://www.foo.bar/foo/bar");

// The template data expansion
final Map<String, VariableValue> data = Maps.newHashMap();
data.put("params", new MapValue(params));

// Expand, build the URL
// The expansion takes care of all the encoding for you
final URL url = new URL(template.expand(data));
于 2013-05-28T14:04:13.347 回答