URL、Java 的 UTF-8

UTF-8 for URL, Java

所以我正在尝试抓取一个提供动词变位的语法网站,但我无法访问需要重音的页面,例如动词 "fág" 的页面。

这是我当前的代码:

    String url = "http://www.teanglann.ie/en/gram/"+ URLEncoder.encode("fág","UTF-8");
    System.out.println(url);

我在使用和不使用 URLEncoder.encode() 方法的情况下都尝试过,它总是给我一个 '?'在使用它时代替 'á',我的 URL 搜索 returns 什么也没有。基本上,我想知道是否有类似于 Python 的 'urllib.parse.quote_plus' 的东西。我已经尝试搜索并尝试了 Whosebug 中的许多不同方法,但都无济于事。任何帮助将不胜感激。

最后,我将用用户输入的参数替换给定的字符串。目前只是用它来测试。

解决方案:不是Java,而是IntelliJ。

评论摘要

测试代码运行正常。

import java.io.UnsupportedEncodingException;
import static java.net.URLEncoder.encode;

public class MainApp {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String url = "http://www.teanglann.ie/en/gram/"+ encode("fág", "UTF-8");
        System.out.println(url);
    }
}

发出的效果如下

http://www.teanglann.ie/en/gram/f%EF%BF%BDg

哪个会转到正确的页面。

正确的步骤是

  • 确保源代码编码正确。 (IntelliJ 可能 不能全部猜对)
  • 运行 具有适当编码(在本例中为 utf-8)的程序

(见 What is the default encoding of the JVM? 进行相关讨论)

根据 Wyzard 的评论编辑

以上代码是偶然工作的(比如没有空格)。获得编码 URL 的正确方法如下所示 ..

 String url = "http://www.teanglann.ie/en/gram/fág";
 System.out.println(new URI(url).toASCIIString());

这使用遵循 RFC 2396 的 URI.toASCIIString(),它讨论 统一资源标识符 (URI):通用语法