iOS Mail에서 한글 깨지는 문제 정리 by yiaong


아이폰(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 #

    (강좌인지는 모르겠습니다만, 어쨌든) 감사합니다~ ^^
  • jerome 2011/06/10 09:35 # 삭제

    잘 읽었습니다. 그런데 다른 메일 클라이언트 (웹메일이건 소프트웨어건) 안깨지는데 iOS에서 깨지는 것은 IOS가 너무 빡빡하게 굴거나 아니면 좀 문제가 있다고 생각되는데 이걸 보내는 사람들이 다 바꿔야 하는건지 아직도 잘 모르겠습니다. 미국 야후 메일이나 쥐메일에서는 전혀 안깨지는데 iOS에서 깨진다면 iOS가 좀 노력을 해야 하는 부분이 아닐까 싶어서요. 뭐 여기서 하소연할 일은 아니지만..
  • yiaong 2011/06/11 22:33 #

    예, 애플이 상대적으로 신경을 덜 써주는 듯 느껴지기도 합니다만..
    저는 이런 면에 있어서 좀 원칙주의자라서, 당장은 좀 불편하더라도 보내는 쪽에서 문제를 인식하고 고쳐야 하지 않을까 생각하는 편입니다. 프로토콜은 정확한 정보 교환을 위한 약속이니 지킬 건 지켜야 하지 않을까 하는 거죠.

    세상 일이라는 게 - 기술 세계를 포함해서 - 항상 규칙대로만 돌아가지는 않는다는 게 문제이긴 합니다만. ^^;
  • 그냥 2012/09/26 18:41 # 삭제

    한글이 병신인겁니다.

    애써 좋은 문자를 만들어놓고 한문처럼 묶어쓰기라니...

    소리글자를 한문처럼 모양을 만들어서 묶어 쓰는바람에 완전히 조진겁니다.

    영어처럼 풀어쓰기를 했어야 합니다.

    대한민국 = ㄷ ㅐ ㅎ ㅏ ㄴ ㅁ ㅣ ㄴ ㄱ ㅜ ㄱ

    이렇게요.

    첨에는 외국인이 한글 보듯 햇갈리고 이상하죠 ??????

    풀어쓰기를 하면 당연히 디자인이 풀어쓰기에 맞게 예쁘게 되어 이상하지 않죠.

    옛날에 중국문자밖에 몰랐으니 엄청난 문자를 만들고는 묶어쓰기...

    중국의 뜻글자 ... 세상에 잴 불편한 그 문자의 특성을 그대로 받습니다.
  • yiaong 2012/09/27 01:46 #

    맞는 말씀이기는 합니다만, 그게 또 그 시대의 한계였겠죠. 한자랑 한글이랑 섞어서 써야 했으니까요.

    (그런데.. 이 포스팅의 내용하고는 좀 상관 없는 얘기로군요. ^^)
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.


CCL 안내


Creative Commons License

이 블로그의 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.