엑셀 유니코드 깨짐 - egsel yunikodeu kkaejim

얼마 전, HTML로 구성한 표를 CSV로 내려받는 기능을 구현 한 적 있었습니다. 

이때 내려받은 CSV 파일을 평소에 사용하는 Google Sheet 등으로 열었을 땐 괜찮았는데, 기관에서 사용하는 MS Exel로 열면 다음과 같이 표시되는 문제가 있었습니다.

엑셀 유니코드 깨짐 - egsel yunikodeu kkaejim

이렇게 한글이 깨져보이는 건 인코딩의 차이로 발생하는 문제입니다. 예를 들어 CSV는 UTF-8으로 인코딩이 되었는데, 엑셀에서는 ANSI 혹은 EUC-KR으로 디코딩을 하는 경우가 많습니다. 파일과 엑셀에서의 인코딩 설정이 다를 때 이러한 현상이 생깁니다.

해결 가능한 방법으로는 4가지가 있었습니다. 지금부터 소개하겠습니다.

A. CSV 파일의 포맷을 바꾼다.

엑셀 유니코드 깨짐 - egsel yunikodeu kkaejim
제 연말정산 자료를 예시로 사용하겠습니다.

⑴ CSV 파일을 우클릭 후, '연결 프로그램 - 메모장'을 선택합니다.

엑셀 유니코드 깨짐 - egsel yunikodeu kkaejim
이렇게 메모장으로 파일이 열립니다.

⑵ '파일(F) - 다른 이름으로 저장'을 클릭합니다.

엑셀 유니코드 깨짐 - egsel yunikodeu kkaejim

⑶ 인코딩을 'ANSI'로 변경 후 '저장(S)'을 누릅니다.

엑셀 유니코드 깨짐 - egsel yunikodeu kkaejim

⑷ 엑셀에서 CSV 파일을 열어 확인합니다.

엑셀 유니코드 깨짐 - egsel yunikodeu kkaejim
엑셀에서 확인한 모습

인코딩을 변경 후 엑셀에서 열어보면 정상적으로 표시되는 모습을 확인할 수 있습니다.

다만, 이렇게 파일의 인코딩을 직접 변경하는 방식은 다음과 같은 상황에서는 불편할 수 있습니다.
ⓐ 파일이 여러개인 경우 ⓑ 한 파일을 여러 명이 각각의 PC에서 확인해야 하는 환경

B. 엑셀 기본 인코딩 설정 변경

뷰어 프로그램에서 기본 인코딩 설정을 변경하는 방법이 있습니다.

설정 방법은 뷰어 프로그램마다 다릅니다. Microsoft Office 텍스트 인코딩 선택에 관한 내용은 마이크로소프트 홈페이지 도움말을 참고하시면 됩니다.
support.microsoft.com/ko-kr/office/%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%97%B4%EA%B1%B0%EB%82%98-%EC%A0%80%EC%9E%A5%ED%95%A0-%EB%95%8C-%ED%85%8D%EC%8A%A4%ED%8A%B8-%EC%9D%B8%EC%BD%94%EB%94%A9-%EC%84%A0%ED%83%9D-60d59c21-88b5-4006-8 31c-d536d42fd861

엑셀 유니코드 깨짐 - egsel yunikodeu kkaejim
여담으로, Notepad++에서는 인코딩 표시/변환까지 제공합니다.

설정을 변경하면 파일이 여러 개라도 인코딩을 일일이 변경해 줄 필요는 없습니다. 

하지만 관리자의 수가 매우 많거나 컴퓨터에 능숙하지 않은 사람들이 있다면 '인코딩 설정'이라는 걸 교육하는 것 자체가 어려움일 수 있습니다.

그러니 이왕이면 더 편하게 해결해 줍시다. 아래 두 가지는 개발자 입장에서의 해결 방법입니다.

C. CSV를 ANSI로 작성되게 한다.

엑셀에서의 디코딩 기본값이 ANSI라서 한글이 깨진다면, 처음부터 CSV의 인코딩을 UTF-8이 아닌 ANSI로 작성하면 문제가 해결될 수 있습니다.

단, 추천드릴 수는 없는 방식입니다. 디코딩 기본값이 UTF-8인 엑셀 프로그램을 사용한다면 오히려 ANSI로 작성한 CSV 파일을 열었을 때 다음과 같이 깨질 수 있습니다.

엑셀 유니코드 깨짐 - egsel yunikodeu kkaejim
ANSI로 인코딩 된 문자열을 UTF-8로 표시했을 때의 모습

인코딩에는 차이만 있을 뿐 틀린 건 아니기 때문입니다.

D. CSV의 인코딩을 표시해준다.

그렇다면 인코딩에 상관없이 한글이 깨져 보이지 않도록 할 수는 없는 것일까요?

할 수 있습니다. "이 파일은 UTF-8으로 작성되었습니다!" 하고 엑셀 프로그램에 알려주는 것입니다.

거의 모든 엑셀 뷰어 프로그램들은 UTF-8이든 ANSI든 정상적으로 표시할 능력을 가지고 있습니다. 하지만 Google Sheet, Polaris Sheet에서는 자동으로 파일의 인코딩을 잘 알아내는 데 반해, MS Exel과 같은 일부 프로그램들은 가끔 인코딩을 식별하지 못하고 기본 설정으로 표시하는 것입니다.

그렇다면 CSV 파일의 인코딩을 MS Exel에서도 인식할 수 있도록 파일에 장치를 심어주면 됩니다. 문서의 맨 앞에 이렇게 생긴 문자열을 추가해주면 됩니다. 

/ufeff

/ufeff는 해당 내용이 어떤 문자열로 인코딩 되었는지를 표현하는 식별자입니다. 이것을 맨 앞에 적어놓으면 엑셀 프로그램에서는 파일의 인코딩 방식을 이해하고 그에 맞게 출력할 수 있습니다.

엑셀 유니코드 깨짐 - egsel yunikodeu kkaejim
맨 앞에 붙여주기만 하면 돼서 정말 간단하게 코드를 수정할 수 있습니다.

마무리

저는 마지막 방법을 통해 문제를 해결했습니다.

비슷한 문제를 겪는 분들께 도움이 되었으면 좋겠습니다.