首页 > 解决方案 > URLEncoder - 用于空白空间而不是 %20 或 + 的字符集

问题描述

我正在尝试从我的 Java 应用程序打开新电子邮件:

        String str=String.valueOf(email);
        String body="This is body";
        String subject="Hello worlds";
        String newStr="mailto:"+str.trim()+"?subject="+URLEncoder.encode(subject,"UTF-8")+"&body="+URLEncoder.encode(body, "UTF-8")+"";
        Desktop.getDesktop().mail(new URI(newStr));

这是我的 URLEncoding。由于我不能在不编码的情况下在 URL 中使用正文或主题字符串,因此我的输出使用“+”而不是空格。这很正常,我理解。我在想是否有办法在我的信息中正常可视化主题和正文?我尝试使用 .replace("+"," ") 但它不起作用,因为它给出了错误。现在是这样的:

在此处输入图像描述

我认为可能有不同的字符集,但我不确定。

标签: javaemailurlencoding

解决方案


这就是 URLEncoder 的工作方式。

一种可能的方法是将 all 替换+%20after URLEncoder.enocde(...) 或者您可以依靠 URI 构造函数正确编码您的参数:

String scheme = "mailto";
        String recipient = "recipient@snakeoil.com";
        String subject = "The Meaning of Life";
        String content = "..., the universe and all the rest is 42.\n Rly? Just kidding. Special characters: äöü";
        String path = "";
        String query = "subject=" + subject + "&body=" + content;
        Desktop.getDesktop().mail(new URI(scheme, recipient, path, query, null));

两种解决方案都有问题:在第一种方法中,您可能会替换实际+标志,而第二种方法中,您将遇到&字符问题。


推荐阅读