원리 해설게시일 읽는 시간 약 8분

메일 제목이 깨지는 원인과 해결법: =?UTF-8?B?, =?ISO-2022-JP?B?, $B 읽는 법

받은 일본어 메일의 제목이 ‘=?UTF-8?B?5paH5a2X…?=’ 같은 영문자와 숫자로 보이거나, 본문이 ‘$BL@F|$N…(B’로 보일 때가 있습니다. 이는 메일로 일본어를 보내기 위한 정해진 표기법이 그대로 드러난 상태입니다. 이 글에서는 제목의 =?…?= 구조, B 방식과 Q 방식의 차이, JIS 메일의 $B, 본문이 깨지는 원인과 보내는 쪽에서 할 수 있는 대책을 정리합니다.

제목의 =?UTF-8?B?…?=는 ‘일본어를 영문자와 숫자로 감싼 형태’

메일 헤더(제목, 보낸 사람 등)는 원래 영문자와 숫자만 통과시키는 규칙으로 만들어졌습니다. 그래서 일본어 제목은 문자 코드와 변환 방법을 함께 적은 뒤 영문자와 숫자로 바꿔 보냅니다. 이것이 MIME 인코딩(RFC 2047)이며 다음과 같은 형태입니다.

부분예의미
=?=?여기서 감싼 글자가 시작된다
문자 코드UTF-8 / ISO-2022-JP안에 든 일본어의 문자 코드
변환 방법B / QB는 Base64, Q는 Quoted-Printable
내용5piO5pel44Gu…일본어 바이트를 영문자와 숫자로 바꾼 것
?=?=여기서 끝난다

예를 들어 ‘=?UTF-8?B?5piO5pel44Gu5Lya6K2w44Gu6LOH5paZ44KS6YCB44KK44G+44GZ?=’는 ‘내일 회의 자료를 보냅니다’라는 일본어 문장의 UTF-8을 Base64로 바꾼 것입니다. 메일 앱은 보통 이를 자동으로 일본어로 되돌려 표시하지만, 스마트폰 알림, 메일 로그, 웹 폼에서 온 알림 메일, 프로그램으로 추출한 제목 등에서는 감싼 형태 그대로 보일 수 있습니다.

B 방식, Q 방식, ISO-2022-JP 제목 읽는 법

  • B 방식(Base64): =?UTF-8?B?5paH5a2X5YyW44GR?=를 디코딩하면 ‘문자 깨짐’을 뜻하는 일본어 단어가 된다. 일본어 제목은 대부분 이 방식이다
  • Q 방식(Quoted-Printable): =?UTF-8?Q?=E6=96=87=E5=AD=97?=를 디코딩하면 ‘文字’(글자)가 된다. = 뒤의 두 자리가 1바이트이며, 영어가 많은 제목에 쓰인다
  • ISO-2022-JP(JIS): =?ISO-2022-JP?B?GyRCTEBGfCROMnE1RCROO3FOQSRyGyhC?=를 디코딩하면 위 문장의 앞부분이 된다. 일본 메일 소프트웨어에서 오래전부터 쓰인 형태다

긴 제목은 한 줄이 너무 길어지지 않도록 여러 개의 =?…?=로 나뉘어 줄바꿈됩니다. 예를 들어 위 문장을 ISO-2022-JP로 보내면 ‘=?ISO-2022-JP?B?GyRCTEBGfCROMnE1RCROO3FOQSRyGyhC?=’와 ‘=?ISO-2022-JP?B?GyRCQXckaiReJDkbKEI=?=’ 두 개로 나뉠 수 있습니다. 나뉜 부분 사이의 공백과 줄바꿈은 규칙에 따라 없애고 이어 붙입니다.

본문이 ‘$BL@F|$N…(B’가 되는 것은 ESC가 빠진 JIS

ISO-2022-JP는 ESC라는 보이지 않는 제어 문자로 ‘여기부터 일본어’, ‘여기부터 영문자와 숫자’를 전환하는 문자 코드입니다. ‘ESC $ B’로 일본어가 시작되고 ‘ESC ( B’로 영문자와 숫자로 돌아갑니다. 메일을 텍스트로 복사하거나 다른 시스템으로 가져올 때 ESC만 빠지면, ‘$BL@F|$N2q5D$N;qNA$rAw$j$^$9(B’처럼 전환 신호와 내용이 영문자와 숫자 그대로 보입니다.

이 형태는 ‘$B’와 ‘(B’ 사이의 영문자와 숫자를 두 글자씩 일본어 한 글자로 읽으면 원래대로 돌아옵니다. 위의 예는 내일 회의 자료에 관한 그 문장입니다. ESC를 채워 다시 읽을 뿐이므로 글자가 빠지는 일은 없습니다.

본문이 ‘縺’, ‘ã’, ‘‚’가 되는 원인

본문 깨짐은 메일 헤더의 ‘Content-Type: text/plain; charset=…’ 지정과 본문의 실제 문자 코드가 어긋날 때 일어납니다. 본문이 UTF-8인데 charset이 Shift_JIS로 적혀 있으면 ‘縺’, ‘繧’투성이가 되고, charset 지정이 없어 받는 쪽이 서유럽 문자 코드로 읽으면 ‘ã’, ‘æ’가 늘어섭니다.

  • 웹 폼 자동 회신이나 시스템 알림 메일에서 프로그램이 charset을 적지 않았다
  • Shift_JIS로 쓴 템플릿을 UTF-8 메일 발송 프로그램으로 보내고 있다
  • 메일링 리스트나 전달 도중에 본문의 문자 코드만 변환되었다
  • 본문이 Base64나 Quoted-Printable(=E3=81=82 형태) 그대로 보인다. 이는 깨진 것이 아니라 감싼 형태 그대로인 것이다

메일 소프트웨어에 따라 표시 문자 코드를 직접 바꿀 수 있습니다(‘보기’ 메뉴의 문자 인코딩 항목 등). 바꿀 수 없다면 깨진 본문을 복사해 도구에 붙여넣으면 어떤 혼동인지 조사해 되돌립니다. 깨진 모양을 구별하는 법은 문자 깨짐 패턴 조견표에 정리했습니다.

보내는 쪽에서 할 수 있는 대책

  1. 1

    문자 코드를 UTF-8로 통일한다

    요즘 메일 앱과 스마트폰은 UTF-8을 문제없이 읽습니다. 제목·본문·첨부 파일 이름의 문자 코드를 UTF-8로 통일하고, 헤더에 charset=UTF-8을 반드시 적습니다.

  2. 2

    기종 의존 문자와 이모지에 주의한다

    상대가 ISO-2022-JP로 받는 오래된 환경이라면 ‘①’, ‘㈱’, ‘髙’ 같은 글자나 이모지가 ‘?’나 ‘〓’가 될 수 있습니다. 외부로 보내는 정형문에서는 ‘(1)’, ‘(株)’처럼 바꿔 두면 안전합니다.

  3. 3

    자신에게 테스트 메일을 보낸다

    시스템 알림 메일은 Gmail, Outlook, 스마트폰 메일 앱 등 여러 환경에서 제목과 본문을 확인합니다. 제목이 =?…?= 그대로 보이면 발송 쪽의 인코딩 표기가 잘못되었을 가능성이 있습니다.

메일에 첨부한 CSV가 Excel에서 깨진다는 문의도 많습니다. 이는 메일이 아니라 파일의 문자 코드 문제이며, 대책은 CSV가 엑셀에서 깨질 때 고치는 법에서 설명합니다.

자주 묻는 질문

메일 제목에 =?UTF-8?B?가 표시되는 이유는 무엇인가요?
일본어 제목을 영문자와 숫자로 감싸 보내는 규칙(MIME 인코딩)의 형태가 그대로 보이기 때문입니다. 메일 앱 이외의 알림이나 로그에서는 자동으로 되돌려지지 않을 수 있습니다. =?와 ?= 사이는 Base64이므로 UTF-8로 읽으면 일본어로 돌아옵니다.
=?ISO-2022-JP?B? 제목은 어떻게 디코딩하나요?
Base64를 푼 뒤 ISO-2022-JP(JIS)로 읽습니다. Base64만 풀면 ESC가 섞인 영문자와 숫자가 됩니다. 긴 제목은 여러 개의 =?…?=로 나뉘어 있으니 사이의 공백과 줄바꿈을 없애고 함께 읽습니다.
메일 본문이 $B나 (B가 섞인 영문자와 숫자가 됩니다.
ISO-2022-JP로 쓴 일본어에서 전환 신호인 ESC가 빠진 상태입니다. ‘$B’와 ‘(B’ 사이의 영문자와 숫자를 두 글자씩 한 글자로 읽으면 되돌릴 수 있습니다.
상대에게 간 메일이 깨지지 않게 하려면 어떻게 하나요?
제목과 본문의 문자 코드를 UTF-8로 통일하고 헤더에 charset=UTF-8을 적습니다. 오래된 환경으로 보낼 가능성이 있다면 ①이나 ㈱ 같은 기종 의존 문자와 이모지를 피하고, 자신에게 테스트 메일을 보내 확인합니다.

이 글에서 소개한 도구

함께 읽으면 좋은 글

원리 해설약 8분

문자 깨짐 패턴 조견표: 縺, ã, ‚, ƒ, $B로 원인이 된 문자 코드 구별하기

‘縺薙s縺ォ縺。縺ッ’, ‘日本語’, ‘‚±‚ñ‚É‚¿‚Í’ 같은 일본어 문자 깨짐은 엉망으로 보이지만 사실 규칙대로 깨진 것입니다. 처음 나오는 글자를 보면 어떤 문자 코드를 어떤 것과 혼동했는지 거의 알 수 있습니다. 이 글에서는 자주 보는 일곱 가지 패턴을 예시와 함께 조견표로 정리하고, 각각이 일어나는 이유와 되돌릴 수 있는 깨짐과 없는 깨짐의 구별법을 설명합니다.

글 읽기 →
사용 가이드약 8분

CSV가 엑셀에서 깨질 때 고치는 법|UTF-8(BOM 포함)과 CP949(ANSI) 구분해서 쓰기

웹 서비스에서 내려받은 CSV를 더블클릭해 엑셀로 열었더니 ‘이름,주소’가 ‘�씠由�,二쇱냼’처럼 깨져 있었다. 이것은 CSV 내용이 망가진 것이 아니라 엑셀이 문자 인코딩을 잘못 짚어 읽었을 뿐입니다. 이 글에서는 깨지는 이유, 지금 열어 둔 CSV를 제대로 여는 법, 다음부터 깨지지 않게 저장하는 법(UTF-8 BOM 포함·CP949), 변환할 때 사라지는 문자의 주의점을 정리합니다.

글 읽기 →
원리 해설약 8분

%E3%81%82, \u3042, \343 읽는 법: URL·JSON·Git에서 일본어가 부호가 되는 이유

URL을 복사했더니 ‘%E6%96%87%E5%AD%97’, API 응답을 봤더니 ‘\u6587\u5b57’, Git 파일 이름이 ‘\346\226\207’. 모두 문자 깨짐처럼 보이지만 일본어가 망가진 것이 아니라, 일본어의 바이트나 번호를 영문자와 숫자로 적은 ‘부호’가 그대로 보이는 상태입니다. 이 글에서는 자주 보는 아홉 가지 표기의 구별법과 읽는 법, 어디서 나오는지, 일본어로 표시하는 설정을 정리합니다.

글 읽기 →