首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确编码邮件主题和正文字符串的Desktop.Action.MAIL :在URI中

正确编码邮件主题和正文字符串的Desktop.Action.MAIL :在URI中
EN

Stack Overflow用户
提问于 2011-07-20 12:48:33
回答 1查看 1.7K关注 0票数 2

我有一个特定于Java6中的Java的问题,更具体地说,就是desktop.mail(URI Uri)。

我想知道是否有一个函数可以用来确保f.ex中的主体和主体:

mailToURI =新URI("mailto",getToEmails() + "?SUBJECT=“+ getEmailSubject() + "&BODY=”+ getEmailBody(),null);

desktop.mail(mailToURI);

是否与rfc2368保持一致,并在电子邮件应用程序中正确显示?

目前,有问题的文本的例子有:斯堪的纳维亚字母:欧姆和在包含符号(&)和f.ex:http://www.whatever.com?a=b&c=d等的正文中添加复杂的URLS。

在Java中是否有一个函数可以确保在使用mailto: URI方案和Java桌面邮件(URI)函数时保持上述查找的完整性?

能做一个吗?

在这一点上,我已经尝试了我能想到的一切,包括:

  • MimeUtility.encodeText()
  • URLEncode.encode(..
  • A自定义函数encodeUnusualCharacters()

私有静态最终模式SIMPLE_CHARS = Pattern.compile("a-zA-Z0-9");

代码语言:javascript
复制
private String encodeUnusualChars(String aText) {
    StringBuilder result = new StringBuilder();
    CharacterIterator iter = new StringCharacterIterator(aText);
    for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) {
        char[] chars = {c};
        String character = new String(chars);
        if (isSimpleCharacter(character)) {
            result.append(c);
        } else {
            //hexEncode(character, "UTF-8", result);
        }
    }
    return result.toString();
}

private boolean isSimpleCharacter(String aCharacter) {
    Matcher matcher = SIMPLE_CHARS.matcher(aCharacter);
    return matcher.matches();
}

/**
For the given character and encoding, appends one or more hex-encoded characters.
For double-byte characters, two hex-encoded items will be appended.
 */
private static void hexEncode(String aCharacter, String aEncoding, StringBuilder aOut) {
    try {
        String HEX_DIGITS = "0123456789ABCDEF";
        byte[] bytes = aCharacter.getBytes(aEncoding);
        for (int idx = 0; idx < bytes.length; idx++) {
            aOut.append('%');
            aOut.append(HEX_DIGITS.charAt((bytes[idx] & 0xf0) >> 4));
            aOut.append(HEX_DIGITS.charAt(bytes[idx] & 0xf));
        }
    } catch (UnsupportedEncodingException ex) {
        Logger.getLogger(LocalMail.class.getName()).log(Level.SEVERE, null, ex);
    }
}

  • 和更多的.

在最好的情况下,我会在打开的电子邮件中得到编码的文本。

如果不提供任何特殊编码,就会导致或类似地停止对内容的进一步处理。

我觉得我错过了一些关键的东西。有人能给我一个解决办法吗?

对于换行符,我使用字符串NL = System.getProperty("line.separator");

也许需要调用一些特定于系统的东西才能使其工作??

顺便说一下,我现在用的是MacOSX10.6.8和Mail4.5

marius$ Java -version java版本"1.6.0_26“1.6.0_26(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425) java HotSpot(TM)客户端VM (build 20.1-b02-384,混合模式)

我真的觉得一定有一种方法--否则desktop.mail(URI)函数的主题和消息部分就完全不可靠了。

任何帮助我指出正确的方向是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2011-11-28 10:03:53

试试这个,希望它对你有用。

代码语言:javascript
复制
String result = java.net.URLEncoder.encode(src, "utf-8").replaceAll("\\+", "%20").replaceAll("\\%0A", "%0D%0A");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6762155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档