UTF8 이메일 헤더를 디코딩하십시오
문제
양식의 이메일 주제가 있습니다.
=?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.