Как декодировать q-кодирование в C? - PullRequest
4 голосов
/ 02 января 2012

Есть ли библиотека для q-кодирования?Мне нужно декодировать некоторый q-кодированный текст, такой как:

**Subject: =?iso-8859-1?Q?=A1Hola,_se=F1or!?=**

Ответы [ 3 ]

2 голосов
/ 03 января 2012

GNU Mailutils libmailutils является одним из примеров такой библиотеки.

"Q" -кодирование задается RFC 2047 , поэтому использование его в качестве поискового термина даетдругие соответствующие результаты.

1 голос
/ 15 декабря 2017

Тема письма закодирована в соответствии с RFC 2047. Мы можем декодировать ее, используя функцию mu_rfc2047_decode(), предоставляемую GNU mailutils.Пример:

#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月计划表
0 голосов
/ 02 января 2012

Не уверен насчет библиотек Q-кодирования, не могу их найти.

Обратите внимание, что ваш последний пример не похож на кодировку Q, обратите внимание, что символ после кодировки («UTF-8») - это не «Q», а «B». Это означает, что это кодировка base64, для которой существует множество библиотек, glib является одним из примеров.

См. MIME в Википедии для получения подробной информации о том, как определить, какая кодировка используется.

...