Play Framework - 通过SendGrid接收电子邮件 - 电子邮件正文的字符编码

时间:2013-10-18 17:29:21

标签: java email encoding utf-8 playframework

我正在Java Play Framework中开发一个小型邮件客户端,我正在使用SendGrid来发送电子邮件。收到电子邮件后,会将其发布到网址,然后使用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");

请你提出解决方案吗?非常感谢你提前!

1 个答案:

答案 0 :(得分:0)

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

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

现在问题是,为了从请求中检索文件附件,我需要将请求解析为MultipartFormData。使用上面的注释,我在调用时得到一个NullPointerException,这是可预测的:

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

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