【问题标题】:Play Framework - receiving email through SendGrid - character encoding of email bodyPlay Framework - 通过 SendGrid 接收电子邮件 - 电子邮件正文的字符编码
【发布时间】:2013-10-18 17:29:20
【问题描述】:

我正在 Java Play 框架中开发一个小型邮件客户端,并且我正在使用 SendGrid 来处理电子邮件。当收到一封电子邮件时,它会被发布到一个 url,然后我使用 JsonNode 解析发布的表单。现在的问题是该表单的“to”、“from”、“subject”字段由 SendGrid 自动转换为 UTF-8。现在问题来了:显然,电子邮件正文是用“ISO-8859-1”编码的。我需要将该字符串转换为“UTF-8”。我已经尝试了几种方法,但很可能我做错了什么,因为我总是得到包含重音/变音符号的法语或德语单词的奇怪字符(例如“Zürich”出来为“Z?rich”。我用于转换的代码如下:

byte[] msg = message.getBytes("ISO-8859-1");
byte[] msg_utf8 = new String(msg, "ISO-8859-1").getBytes("UTF-8");
message = new String(msg_utf8, "UTF-8");

能否请您提出解决方案?非常感谢您!

【问题讨论】:

  • 什么是“消息”? stackoverflow.com/questions/652161/… 适合你吗?
  • 我从已发布的表单(通过 SendGrid)中获取字符串消息。不,我已经尝试过了。因此,根据电子邮件标题,我直接得到了这个消息字符串,它在 ISO-8859-1 中。而且我必须将其转换为 UTF-8,以便将其存储在数据库中。
  • 你能把邮件头作为字节数组吗?为了帮助您,您的问题应该很容易重现。
  • 我得到的消息字符串是这样的: String message = form.get("text");其中最终 DynamicForm form = form().bindFromRequest();所以我真的不明白你的意思?
  • 没有人通过Java中的SendGrid成功接收邮件吗?

标签: java email encoding utf-8 playframework


【解决方案1】:

好的,所以我设法使用注释从 SendGrid 获取原始字节请求,并使用正确的编码创建了 java 字符串:

@BodyParser.Of(BodyParser.Raw.class)
public static Result getmail() {
 ...
}

现在的问题是,为了从请求中检索文件附件,我需要将请求解析为 MultipartFormData。设置了上面的注解,调用时会得到 NullPointerException,这是可以预料的:

request().body().asMultipartFormData().getFiles()

你们中是否有人知道我如何再次获得相同的请求,但使用 @BodyParser.Of(Bodyparser.MultipartFormData.class) 进行解析?所以我有点需要结合这两个注释或找到一种方法将我从原始解析器获得的 byte[] 转换为 MultiFormData。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多