在java中格式化UTF-8字符串的最有效方法是什么?

时间:2010-07-21 02:03:21

标签: java formatting utf-8 uri

我正在做以下事情:

String url = String.format(WEBSERVICE_WITH_CITYSTATE, cityName, stateName);
String urlUtf8 = new String(url.getBytes(), "UTF8");
Log.d(TAG, "URL: [" + urlUtf8 + "]");
Reader reader = WebService.queryApi(url);

我正在寻找的输出主要是将带有空格的城市名称(例如“Overland Park”)格式化为Overland%20Park

这是最好的方式吗?

2 个答案:

答案 0 :(得分:1)

假设您实际上想要对您的字符串进行编码以便在URL中使用(即“Overland Park”也可以格式化为“Overland + Park”),您需要URLEncoder.encode(url, "UTF-8")。其他不安全的字符将转换为您要求的%xx格式。

答案 1 :(得分:1)

简单的答案是使用@Recurse所述的URLEncoder.encode(...)。但是,如果已经对部分或全部URL进行了编码,则可能导致双重编码。例如:

http://foo.com/pages/Hello%20There

http://foo.com/query?keyword=what%3f

URLEncoder.encode(...)的另一个问题是它不理解某些字符应该在某些上下文中转义而不是其他字符。例如,一个'?'在查询参数中应该进行转义,但是'?'标志着“查询部分”的开头不应该被转义。

我认为添加丢失转义的更安全的方法如下:

String safeURI = new URI(url).toASCIIString();

但是,我还没有测试过这个...