当我在 URI 的查询字符串部分有一个空格 (' ') 时,我在使用 URLConnection.getInputStream() 时遇到了一个非常奇怪的问题。具体来说,当我认为它们都应该失败或都成功时,我有一个有效的 URL 和另一个无效的 URL,此外,它每次都有效。
工作 URL:http ://minneapolis.craigslist.ca/search/sss?catAbb=sss&query=iPhone+sprint&sort=date&srchType=A&format=rss 失败的 URL(以下例外):http ://winnipeg.craigslist.ca/search/sss ?catAbb=sss&query=iPhone+sprint&sort=date&srchType=A&format=rss
conn.getInputStream() 抛出 IO 异常:“索引 67 处查询中的非法字符:http ://winnipeg.en.craigslist.ca/search/sss?catAbb=sss&query=iPhone sprint two&sort=date&srchType=A&format=rss”
看来 openConnection 无法获得空间(我已经用 '+' 替换了它,因为我希望用 'URL' 替换它,我也尝试了 '%20' 得到相同的结果。
此外,URL.toString() 报告我上面打印的 URL,“+”不是空格。
代码如下,searchUrl 是一个 'URL' 实例。
URLConnection conn = null;
conn = searchUrl.openConnection();
conn.setConnectTimeout(CONNECT_TIMEOUT);
conn.setUseCaches(true);
conn.setAllowUserInteraction(false);
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
InputStream istream = conn.getInputStream();
int numBytesRead, numBytesWritten = 0;
byte[] buffer = new byte[8 * 1024];
while ((numBytesRead = istream.read(buffer, 0, 8 * 1024)) > 0) {
oStream.write(buffer, numBytesWritten, numBytesRead);
numBytesWritten += numBytesRead;
}
关于在哪里处理这个问题的任何想法?我即将推销 URLConnection 并走另一条路线......
谢谢肯尼。