문제

양식의 이메일 주제가 있습니다.

=?utf-8?B?T3.....?=

전자 메일의 본문은 UTF -8 Base64 인코딩되어 있으며 정상으로 디코딩되었습니다. Perl의 이메일 :: MIME 모듈을 사용하여 이메일을 해독하고 있습니다.

=? UTF-8 Delimiter의 의미는 무엇 이며이 문자열에서 정보를 어떻게 추출합니까?

도움이 되었습니까?

해결책

그만큼 encoded-word 토큰 (에 따라 RFC 2047) 일부 헤더 값에서 발생할 수 있습니다. 그들은 다음과 같이 구문 분석됩니다.

=?<charset>?<encoding>?<data>?=

charset은 UTF-8입니다.이 경우 인코딩은 IS입니다. B 이는 Base64를 의미합니다 (다른 옵션은입니다 Q 인용문을 의미합니다).

읽으려면 먼저 Base64를 해독 한 다음 UTF-8 문자로 취급하십시오.

자세한 내용은 다양한 인터넷 메일 RFC를 읽으십시오. RFC 2047.

Perl을 사용하고 있기 때문에 Encode :: Mime :: 헤더 사용할 수 있습니다 :

개요

use Encode qw/encode decode/;
$utf8   = decode('MIME-Header', $header);
$header = encode('MIME-Header', $utf8);

요약

이 모듈은 RFC 2047 MIME 헤더 인코딩을 구현합니다. 3 가지 변형 인코딩 이름이 있습니다. Mime-Header, Mime-B 및 Mime-Q. 차이점은 아래에 설명되어 있습니다

              decode()          encode()  
MIME-Header   Both B and Q      =?UTF-8?B?....?=  
MIME-B        B only; Q croaks  =?UTF-8?B?....?=  
MIME-Q        Q only; B croaks  =?UTF-8?Q?....?=

다른 팁

인코딩 모듈이이를 처리한다고 생각합니다. MIME-Header 인코딩이 있으므로 이것을 시도하십시오.

use Encode qw(decode);
my $decoded = decode("MIME-Header", $encoded);

체크 아웃 RFC2047. 'B'는 마지막 두 가지 사이의 부분이 Base64 인코딩임을 의미합니다. 'UTF-8'은 자연스럽게 디코딩 된 데이터가 UTF-8로 해석되어야 함을 의미합니다.

마임 :: 단어 Mime-Tools에서도이를 위해서도 잘 작동합니다. 나는 Encode에서 어떤 문제를 일으켰고 Mime :: Words가 Encode가하지 않은 일부 문자열에서 성공했습니다.

use MIME::Words qw(:all);
$decoded = decode_mimewords(
    'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
);

이것은 헤더의 숯불 라벨링을위한 표준 확장입니다. RFC2047.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top