我不敢相信 Java YET 还没有解决这个问题。
我见过Android:如何将带有空格的 URL 字符串解析为 URI 对象?,第一个答案正是我的问题。
我有一个包含文件位置的字符串。这可以是系统中的文件(/... 或 c:....)或 URL(http://.....、ftp://.... 等)如果文件是事先在系统或 URL 中指定是未知的。
为了区分两者,我使用
new URI(string)
然后问:
uri.isAbsolute()
这很好用......但你猜怎么着 - 如果路径有空格,我会得到一个例外!(java.net.URISyntaxException) 所以为了解决这个问题,我做的是一个初步的:
URLEncoder.encode(string, "UTF-8");
但是现在,你猜怎么着——如果我收到一个“http://..”,所有的特殊字符都被替换了,现在“isAbsolute()”不能把它识别为一个绝对的 URI。
当然我可以做一个:
string.replace(" ", "%20")
但是……如果名称中有一个与空格不同的奇怪字符,例如中文或法文字符,会发生什么?我必须自己更换它们吗?我想 Java 应该有一些东西可以在更高的层次上处理这种情况。这是一个非常常见的问题,但我无法找到正确的答案。