기타

Mail Encoding & UTF-8 <-> Unicode 변환

nopdata 2016. 7. 21. 09:44

=?UTF-8?B?XXXX?=

메일전송에서 사용되는 인코딩 방식 중 하나인 것 같다. 주로 제목이나 보내거나 받은 사람, 파일 이름에 사용된다.

이 방식이 사용되는 이유는 메일 전송에서 사용되는 언어가 꼭 알파벳이라는 보장은 없다.

한글일 수도, 일본어일 수도 있다. 그렇게 되면 아스키값으로만 표기할 수 없다.

따라서 이 같은 형태를 취함으로써 사용가능한 문자열을 넓힌다.


형식은 다음과 같다.

=?charset?encoding?encoded-text?=

charset : 인코딩된 문자열의 charset을 의미한다.

encoding : B와 Q, 둘 중 한가지의 값을 가지며 B일 경우에는 Base64 인코딩이 되어있다는 의미이다.

encoded-text : 말 그대로 인코딩된 문자열이다.


다음은 예시이다.

=?UTF-8?B?44GC44GV==?=

정보를 확인해 보면 UTF-8로 인코딩 되어 있으며 Base64인코딩이 되어있다.

44GC44GV==를 디코딩 해 보면 "\xe3\x81\x82\xe3\x81\x95"가 나온다.

이 값은 UTF-8로 あさ, 아침을 의미한다.


UTF-8 문자열을 유니코드로 변환하는 방법은 디코딩 사이트를 사용하거나, 아래 사이트를 보고 풀어내는 방법이 있다.

주로 파이썬에서 테스트를 하는데 한글의 경우 순서가 맞지 않아 일본어를 테스트 해 보았다.


예시 문자열은 위에서 사용한 あさ"\xe3\x81\x82\xe3\x81\x95"이다.

< あさ "\xe3\x81\x82\xe3\x81\x95" >

3자리씩 끊어서 찾으면 위와 같다.

U+0x3042, U+0x3055가 각각 あ, さ 이다.

あさ의 실제 유니코드 값은 "\xaa\xa2", "\xaa\xb5" 이다.

따라서 베이스가 되는 U의 값은 0x7a60이 된다.

또는 UTF-8값을 hex값으로 변환한 뒤 0xe2d6e0를 빼주면 해당하는 값을 얻을 수 있다.


< Use Python >

파이썬을 이용하여 내용들을 종합해 보면

-> 인코딩 타입을 확인하고, B일 경우 Base64 디코딩

-> 디코딩 된 값을 charset에 맞게 유니코드로 변환

-> 출력




ref 

http://ncona.com/2011/06/using-utf-8-characters-on-an-e-mail-subject/ddi

http://www.utf8-chartable.de/unicode-utf8-table.pl?start=12288&names=-&utf8=string-literal




'기타' 카테고리의 다른 글

CGC on Ubuntu  (0) 2016.08.24
CGC?  (0) 2016.07.28
Google Map API 사용(Static)  (0) 2016.07.21
ntfs-mft  (0) 2016.05.02
los.sandbox  (0) 2016.04.25