java - 如何在 Java 中解析这样的 URI

标签 java parsing uri

我正在尝试解析以下 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/

相关文章:

java - 如何禁用 h :commandButton without preventing the action and actionListener from being called?

java - 多次查找两个字符串之间的所有字符串

Python:使用命名空间解析 SVG/XML

http - 任何人都可以提供有关 hash(#) 在 url 中的各种用途的好信息吗?

jsp - 我应该在 JSP 中引用哪个 JSTL URL?

java - 如何长时间从图库中获取图片Uri?

java - 为什么 ArrayList 导入不起作用? ( java )

java - Spring Boot + Hibernate JPA 配置以使用 EntityManager

c# - C#DateTime解析器错误?

bash - 在 Bash 中解析数据