java windows桌面邮件主题字符串错误

java windows桌面邮件主题字符串错误,java,windows,email,outlook,Java,Windows,Email,Outlook,我想通过java发送电子邮件。 代码是: ueberschrift = table.getValueAt(i, 0).toString(); text = table.getValueAt(i, 1).toString(); ueberschrift = ueberschrift.replace(" ", "%20") .replace("\n", "%0D%0A").replace("\"", "\u00A8") .replace("%", "%25").re

我想通过java发送电子邮件。 代码是:

ueberschrift = table.getValueAt(i, 0).toString();
text = table.getValueAt(i, 1).toString();

ueberschrift = ueberschrift.replace(" ", "%20")
        .replace("\n", "%0D%0A").replace("\"", "\u00A8")
        .replace("%", "%25").replace(";", "%3B")
        .replace("?", "%3F").replace("&", "%24")
        .replace("$", "%26").replace("<", "%3C")
        .replace(">", "%3E").replace("~", "%7E")
        .replace("\\", "\u00A8");
text = text.replace(" ", "%20").replace("\n", "%0D%0A")
        .replace("\"", "\u00A8").replace("%", "%25")
        .replace(";", "%3B").replace("?", "%3F")
        .replace("&", "%24").replace("$", "%26")
        .replace("<", "%3C").replace(">", "%3E")
        .replace("~", "%7E").replace("\\", "\u00A8");
System.out.println(text);
if (anrede.equals("Frau")) {
    einleitung = "Sehr%20geehrte%20";
} else {
    einleitung = "Sehr%20geehrter%20";
}

text = einleitung
        + anrede
        + "%20"
        + name
        + ",%20%0D%0A%0D%0A"
        + text
        + "%0D%0A%0D%0AMit%20freundlichen%20Gr\u00fc\u00dfen%0D%0A"
        + Login.vorname + "%20" + Login.nachname;

try {
    Desktop.getDesktop().mail(
            URI.create("mailto:" + mail + "?subject="
                    + ueberschrift + "&body=" + text));
} catch (IOException e1) {
    e1.printStackTrace();
}
Outlook将打开一个电子邮件窗口,其中包含正确的起始和结束我用java编写的内容,但字符串文本完全错误。 如果我注释掉replace方法,它完全不起作用。 在Linux上它工作得很好

她是XX夫人

知识%20ipsum%20dolor%20sit%20amet%20consetetur%20adipscing%20elitr%20ed%20diam%20nonumy%20eirmod%20temporate%20invidunt%20ut%20labor%20et%20dolore%20magna%20aliquyam%20erat%20ed%20diam%20voluptua%20At%20vero%20eos%20et%20et%20et%20justo%20duo%20dolores%20et%20et%20ea%20era%20reum%20clita%20bergugren,%20no%20sea%20takimata%20sanctus%20est%20Lorem%20ipsum%20dolor%20sit%20amet.%20Lorem%20ipsum%20dolor%20sit%20amet%20CONSETETETUR%20ADIPSTR%20ELITER%20ED%20DIAME%20NONUMMY%20eirmod%20TEMPORT%20ut%20et%20et%20dolore%20AGNA%20aliquyam%20erat,%20ed%20diam%20voluptua.%20At%20vero%20eos%20et%20accusam%20et%20justo%20duo%20dolores%20et%20ea%20ea%20rebum.%20tet%20clita%20kasd%20gubergren%20no%20ea%20takimata%20est%20Lorem%20ipsum%20dolor%20it%20amet

麻省理工学院弗伦德利希学院 布拉布拉


你有什么想法吗?

你的替代品看起来不对劲。你正在做:

text.replace(" ", "%20")
    .replace("\n", "%0D%0A")
    .replace("\"", "\u00A8")
    .replace("%", "%25")
    ; // and so on
如果您有空间,则在第一次替换中,将其替换为%20。然后在第四次替换中,将所有百分号替换为%25。对于空间,这将导致以下替换:

→ %20→ %2520

这将导致您看到的输出。如果要继续使用手工编制的URL编码机制,请先替换百分比,然后替换其他字符

不过,使用Java或番石榴之类的东西会更容易