2013-10-18 53 views
0

我正在Java Play Framework中開發一個小型郵件客戶端,並使用SendGrid作爲電子郵件。收到電子郵件後,它會發布到一個URL,然後使用JsonNode解析發佈的表單。現在問題是該表單的「to」,「from」,「subject」字段被SendGrid自動轉換爲UTF-8。現在出現這個問題:顯然,電子郵件正文是在「ISO-8859-1」中編碼的。我需要將該字符串轉換爲「UTF-8」。我已經嘗試過幾種方法,但最可能的是我做的事情非常錯誤,因爲我總是會爲包含重音/變音符號的法語或德語單詞生成奇怪的字符(例如「Zürich」以「Z?rich」出現。我使用的轉換代碼如下:?Play Framework - 通過SendGrid接收電子郵件 - 電子郵件正文的字符編碼

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"); 

你能,請提出一個解決方案非常感謝你提前

+0

什麼是「信息」?是否http://stackoverflow.com/questions/652161/how-do-i-convert-between-iso-8859-1-and-utf-8-in-java/1559761#1559761爲你工作? – Schleichardt

+0

我從發佈的表單(通過SendGrid)獲取String消息。不,我已經試過了。所以根據電子郵件標題,我直接給出了這個消息字符串,它在ISO-8859-1中。我必須將其轉換爲UTF-8,以便將其存儲在數據庫中。 – franciscb

+0

你可以把電子郵件標題作爲字節數組嗎?爲了幫助你,你的問題應該很容易重現。 – Schleichardt

回答

0

行,所以我設法從原始字節的請求! SendGrid使用註釋並創建了具有正確編碼的java字符串:

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

現在的問題是,從請求中檢索文件附件,我需要將請求解析爲MultipartFormData。通過以上一系列的註釋,我得到時調用一個NullPointerException異常,這是可以預見的:

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

有任何影響你對我怎麼能再次得到同樣的請求的任何想法,但隨着@ BodyParser.Of解析( Bodyparser.MultipartFormData.class)?所以我需要將這兩個註解組合起來,或者找到一種方法將從Raw分析器獲得的byte []轉換爲MultiFormData。謝謝!