2011-04-07 40 views
1

我目前正在創建一個小郵件客戶端,並面臨charset的問題。 我使用indy的TIdIMAP4組件從郵件服務器檢索數據。當我嘗試檢索郵件正文時,重音字母如ä,ü等將分別轉換爲= E4,= FC,因爲它使用字符集ISO-8859-1。從郵件服務器檢索郵件時更改字符集!

Content-Type:text/plain; 字符集= 「ISO-8859-1」 內容傳輸編碼: 引用可打印

我怎樣才能讓服務器系統向我發送數據在另一個字符集,如UTF-8?這個問題最好的解決方案是什麼?

提前致謝!

回答

5

它不是產生像=E4=FC這樣的字符串的charset,而是Content-Transfer-Encoding$E4$FC是ISO-8859-1中的äü的二進制表示,但它們是8位值。電子郵件仍然主要是7位環境。除非客戶端和服務器在通信期間協商8位傳輸,否則高於$7F的字節八位字節必須以7位兼容方式進行編碼,以安全地通過電子郵件網關,特別是仍存在的傳統網關。 quoted-printable是電子郵件中用於文本內容的常用7位字節編碼。 base64是另一個,但它不是人類可讀的,所以它傾向於用於二進制數據而不是文本數據(雖然它可以用於文本)。

在任何情況下,您都無法讓服務器以另一種編碼方式向您發送電子郵件數據。服務器僅僅傳遞原始郵件數據,原始郵件由發件人傳送給它。如果你想以UTF-8格式輸出數據,那麼你必須在下載之後自己重新編碼。 Indy將爲您處理解碼。

+0

我使用Indy的TIdDecoderQuotedPrintable類來解碼「quoted printable」編碼的字符串。工作得很好!謝謝! – Peacelyk 2011-04-08 09:33:16

相關問題