2012-01-02 141 views

回答

0

不知道關於Q-編碼庫,找不到任何。

待辦事項,雖然,你的後一個例子看起來並不想讓Q編碼,請注意字符集之後的字符(「UTF-8」)是不是「Q」,但是一個「B」。這意味着它是base64編碼,其中有很多庫,glib就是一個例子。

關於如何檢測正在使用的編碼詳見MIME在維基百科上。

+0

對不起你,好吧,我刪除了它。那是個錯誤。 – iyasar 2012-01-02 13:45:27

1

電子郵件主題是根據RFC 2047,我們可以通過使用GNU mailutils提供的函數mu_rfc2047_decode()對其進行解碼編碼。 例子:

#include <stdio.h> 
#include <stdlib.h> 
#include <mailutils/mailutils.h> 
#include <mailutils/mime.h> 
... 
char cipher[] = "=?GB2312?B?UmWjujEy1MK8xruuse0=?="; 
char *plaintext; 
int rc = mu_rfc2047_decode("utf-8", cipher, &plaintext); 
if (rc) { 
    fprintf(stderr, "Fail to decode '%s'\n", cipher); 
} else { 
    puts(plaintext); 
    free(plaintext); 
} 

下載GNU mailutils,請訪問https://mailutils.org/

要了解RFC 2047,讀https://www.ietf.org/rfc/rfc2047.txt

測試結果:

Cipher: 
**Subject: =?iso-8859-1?Q?=A1Hola,_se=F1or!?=** 
Plaintext: 
**Subject: ¡Hola, señor!** 

Cipher: 
=?Big5?Q?=AE=F8=B6O=BA=A18=A4d=BFW=AEa?= 
Plaintext: 
消費滿8千獨家 

Cipher: 
=?GB2312?B?UmWjujEy1MK8xruuse0=?= 
Plaintext: 
Re:12月計劃表