Что это за строка в Perl? - PullRequest
       2

Что это за строка в Perl?

4 голосов
/ 02 апреля 2012

Я использую Mail :: IMAPClient для получения заголовков почты с сервера imap. Работает отлично. Но когда заголовок содержит любой другой символ, кроме [a-z | A-Z | 0-9], я получаю строки, которые выглядят так:

  • Тема: Un сообщение en =? UTF-8? B? ZnJhbsOnYWlzIMOgIGxhIGNvbg ==? = (Исходная строка: "Un message en français a la con")

  • Кузов: = C3 = A9aeio = C3 = B9 = C3 = A8 = C3 = A8 (исходная строка: éaeioùèè)

    1. Что это за странный формат? Это знаменитая "строка perl" внутренний "формат?
    2. Какой самый безопасный способ обработки человеческих идиом с серверов IMAP?

Ответы [ 2 ]

14 голосов
/ 02 апреля 2012

Кодировка тела указана для печати; кодировка заголовка (субъекта) - это кодировка MIME «кодированное слово» (тип «B» для base64). Лучший способ справиться с ними обоими - это передать электронную почту в модуль, способный работать с MIME, такой как Email :: MIME или более старый и громкий MIME :: Lite * 1004. *.

Например:

# $message was retrieved from IMAP
my $mime = Email::MIME->new($message);
my $subject = $mime->header('Subject'); # automatically decoded
my $body = $mime->body_str; # also automatically decoded

Однако, если вам нужно работать с ними вне контекста всего сообщения, существуют также такие модули, как Encode :: MIME :: Header и MIME :: QuotedPrint .

7 голосов
/ 02 апреля 2012

Код указан для печати в кодировке.Это стандартная кодировка, используемая в электронной почте.Это не имеет никакого отношения к внутреннему строковому формату Perl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...