我正在尝试解析以下 URI:http://translate.google.com/#zh-CN|en|你
但收到此错误消息:
java.net.URISyntaxException: Illegal character in fragment at index 34: http://translate.google.com/#zh-CN|en|你
at java.net.URI$Parser.fail(URI.java:2809)
at java.net.URI$Parser.checkChars(URI.java:2982)
at java.net.URI$Parser.parse(URI.java:3028)
“|”有问题字符,如果我去掉“|”,最后一个中文字符不会造成任何问题,正确的处理方法是什么?
我的方法是这样的:
public static void displayFileOrUrlInBrowser(String File_Or_Url)
{
try { Desktop.getDesktop().browse(new URI(File_Or_Url.replace(" ","%20").replace("^","%5E"))); }
catch (Exception e) { e.printStackTrace(); }
}
感谢您的回答,但 BalusC 的解决方案似乎只适用于 url 的一个实例,我的方法需要处理我传递给它的任何 url,它怎么知道将 url 分成两部分的起点在哪里并且只编码第二部分?
最佳答案
管道符是"considered unsafe"用于 URL。您可以通过替换 | 来修复它及其编码的十六进制等效项,即“%7C”
但是,替换 URL 中的单个字符是一种脆弱的解决方案,当您考虑到在任何给定的 URL 中可能有相当多的不同字符需要替换时,这种解决方案效果不佳。您已经在替换空格、插入符号和竖线....但是括号、重音符号和引号呢?或者问号和符号,它们可能是也可能不是 URL 的有效部分,具体取决于它们的使用方式?
因此,更好的解决方案是使用该语言的工具对 URL 进行编码,而不是手动进行。对于 Java,使用 URLEncoder ,根据 BalusC 对这个问题的回答中的示例。
关于java - 如何在 Java 中解析这样的 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1828641/