아이폰(iPhone)이나 아이패드(iPad)의 Mail 프로그램을 통해서 메일을 받아볼 때, 한글이 깨지는 경우가 종종 있다. 내가 주로 쓰는 Gmail 계정과 Mail 프로그램을 연동해서 사용하는 상황에서, 어떤 경우에 메일의 한글이 깨지는지 조사를 해보았다. (iOS 4.2 기준)
조사 결과, 메일 헤더와 메일 본문의 한글이 깨지는 경우가 각각 다르게 나타났다.
1.
메일 헤더의 한글이 깨지는 경우
(iPad 화면: 헤더의 한글이 깨진 예)
메일 헤더에 포함되는 정보, 즉 메일 제목이나 보낸 사람 이름 등에 포함된 한글이 깨지는 경우이다.
RFC 2822에 따르면 메일 헤더에는 ASCII 문자만 사용할 수 있으므로 (2.2. Header Fields 부분 참고), 한글 등 ASCII 문자셋 범위 밖의 글자를 쓰기 위해서는
Encoded-Word 형식을 사용하여야 하는데, 이를 무시하고 그냥 특정 인코딩의 - 주로 EUC-KR 인코딩의 - 문자열 데이터를 그대로 쓰기 때문에 나타나는 문제이다.
* 한글이 깨지는 헤더의 예: EUC-KR 인코딩의 한글 문자열이 그대로 쓰임
From: "국민연금공단" <aaa@aaa.aaa>
Subject: 노후 30년, 지금부터 준비하면 든든
* 바람직한 헤더의 예:
(보낸 사람은 "민변", 메일 제목은 "[편지 6호] <재발송> '삼성을 생각한다'의 저자 김용철 변호사 인터뷰 외")
From: "=?euc-kr?B?uc66rw==?=" <bbb@bbb.bbb>
Subject: =?euc-kr?B?W8btwfYgNsijXSA8wOe537zbPiAnu++8usC7ILv9sKLH0bTZJ8DHIMD6wNogsei/68O2ILqvyKO75yDAzsXNuuQgv9w=?=
iOS의 Mail 앱에서 Gmail 계정을 IMAP로 설정해서 쓸 때 (그리고 Mac OS X의 Mail 프로그램에서도) 이렇게 헤더의 한글이 깨지는 경우를 볼 수 있다. Windows Live Mail 등 다른 종류의 메일 클라이언트 프로그램은 이런 때에도 적당히 알아서 디코딩해서 한글을 보여주는 경우도 있으나, iOS와 Mac OS X의 Mail 프로그램은 그렇게까지 처리해주지는 않고 있다. 어쨌든 문제는 메일을 보내는 쪽에 있기는 하다.
* (근본적인) 해결 방법:
보내는 쪽에서 제대로 된 헤더를 만들어서 보내주도록 한다. Encoded-Word 형식으로, ASCII 문자만 이용해서.
(참고:
http://ko.wikipedia.org/wiki/MIME#Encoded-Word )
iOS의 Mail 앱에서 Gmail을 Exchange 계정으로 (Google Sync 이용) 설정한 경우에는 위와 같은 경우에라도 (즉 헤더의 형식이 잘못돼 있더라도) 제목과 보낸 사람 이름 등 헤더 정보를 한글로 잘 보여준다. 그런데 이 경우에는 다른 문제가 있는데, 다음 내용에 이어진다.
2.
메일 본문의 한글이 깨지는 경우
(iPad 화면: 메일 본문의 한글이 깨진 예)
메일 헤더의 한글이 깨지는 경우와 별개로, 메일 본문의 한글을 읽을 수 없는 경우이다. (위에서 언급한, iOS의 Mail 앱에서 Gmail을 Exchange 계정으로 설정한 상황이다.)
결론부터 말하면, 메일 헤더에서 Content-Transfer-Encoding 값이 "8bit"으로 지정되고, Content-Type의 'charset' 값이 "EUC-KR"로 지정되어 있을 때 메일 본문의 한글이 깨진다.
* 본문의 한글이 깨지는 메일의 예
Content-Transfer-Encoding: 8bit
Content-Type: text/html; charset="EUC-KR"
<html dir="ltr">
<head>
<title></title>
</head>
<body>
<font face="Comic Sans MS"><font size="3"><strong><font style="BACKGROUND-COLOR: #ffcc99" color="#800080" size="5"><font style="BACKGROUND-COLOR: #0000ff" color="#ccffcc">오라~!! 리버4이드 모텔로~~!!!</font><br />
(... 이하 생략 ...)
* 바람직한 메일의 예
Content-Type: text/html; charset="EUC-KR"
Content-Transfer-Encoding: base64
PGh0bWw+PGhlYWQ+PHN0eWxlPiBwIHttYXJnaW4tdG9wOjBweDttYXJnaW4tYm90dG9tOjBw
eDt9IDwvc3R5bGU+PC9oZWFkPgo8Ym9keT48ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDsg
(... 이하 생략 ...)
이메일에서 8bit 데이터를 처리하는 방식이 명확히 표준화되어 있지 않기 때문에 발생하는 문제인 것 같기는 한데, 어쨌든 현재로서는 base64 또는 quoted-printable 방식으로 (말하자면, 7 bit 데이터만 제대로 전달될 수 있는 환경에서라도 무사 통과할 수 있도록) 데이터를 인코딩하여 보내는 것이 가장 확실한 것으로 보인다. 인코딩 결과로 데이터 용량은 약간 늘어나겠지만, 어떤 경우에라도 메일 내용을 볼 수 있도록 하는 게 더 중요할 테니까.
한편, 재미있는 것은 8bit 데이터를 보내더라도 문자 인코딩 방식이 EUC-KR이 아니라 UTF-8 인 경우에는 한글이 제대로 디코딩되어 보인다는 것이다.
(iPad 화면: 8bit / UTF-8 로 보내온 메일이 제대로 표시되는 화면)
11,172자의 한글
낱자 글자마디 중에서 2,350자만 표현 가능한 EUC-KR 인코딩 대신에, 세상의 모든 글자를 표현할 수 있는 유니코드(Unicode)의 대중적인 인코딩 방식 중 하나인 UTF-8을 쓸 것이 강력하게 권장되고 있는 추세인데, 그 추세를 따라야 할 이유(사례)가 하나 더 늘었다고 할 수도 있겠다.
* (근본적인) 해결 방법:
1. 메일을 보내는 쪽에서, 메일 내용을 base64나 quoted-printable로 인코딩해서 보낸다.
2. 가능하면 EUC-KR 대신 UTF-8 인코딩을 사용한다.
요컨대,
메일을 발송하는 쪽에서
1. 메일 헤더 내용은 (한글을 무작정 그대로 쓰지 말고,) 꼭 Encoded-Word 형식으로 인코딩하고,
2. 메일 본문 내용은 (한글을 무작정 그대로 쓰지 말고!) base64 또는 quoted-printable로 인코딩해야,
iPhone이나 iPad에서도 제대로 메일을 받아볼 수 있다.
+ 근본적인 해결 방법은 메일을 보내는 쪽에서 잘 보내는 것이다. 메일을 받는 일반 사용자가 (궁여지책으로나마) 취할 수 있는 방법도 있는 듯하나 그 내용까지는 정리하지 못하였다.
++ 이 글을 쓰고 나서 보니, 마침 얼마 전에 KT도 이 문제에 대해서 해결책을 찾아나선 것을 알 수 있었다. SHOW 블로그에 다음과 같은 글이 올라왔고, 메일 발송 업체들에게 안내 메일을 보내는 작업을 하고 있었다. 관련된 내용이기에 내 글도 트랙백으로 걸어두었다.
[공지] 아이폰에서의 이메일 깨짐 현상, 이렇게 해결해보세요! (SHOW 공식 블로그)
+++ 미디어다음에도 (아이뉴스24에서 보내온) 관련 기사가 떴는데, 제목도 잘못 뽑았고 내용도 틀린 부분들이 있다.
한글 특성 때문에 "아이폰 이메일이 깨져요" (아이뉴스24, 2010년 12월 12일)
(혹시 잘못되거나 보충해야 할 내용 있으면 지적 부탁합니다~.)
덧글
Dr Moro 2010/12/02 21:03 # 답글
강좌 잘 읽었습니다.yiaong 2010/12/03 10:41 #
(강좌인지는 모르겠습니다만, 어쨌든) 감사합니다~ ^^