엑셀파일 한글 깨짐 - egselpail hangeul kkaejim

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

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

엑셀파일 한글 깨짐 - egselpail hangeul kkaejim

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

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

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

엑셀파일 한글 깨짐 - egselpail hangeul kkaejim
제 연말정산 자료를 예시로 사용하겠습니다.

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

엑셀파일 한글 깨짐 - egselpail hangeul kkaejim
이렇게 메모장으로 파일이 열립니다.

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

엑셀파일 한글 깨짐 - egselpail hangeul kkaejim

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

엑셀파일 한글 깨짐 - egselpail hangeul kkaejim

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

엑셀파일 한글 깨짐 - egselpail hangeul 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

엑셀파일 한글 깨짐 - egselpail hangeul kkaejim
여담으로, Notepad++에서는 인코딩 표시/변환까지 제공합니다.

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

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

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

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

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

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

엑셀파일 한글 깨짐 - egselpail hangeul kkaejim
ANSI로 인코딩 된 문자열을 UTF-8로 표시했을 때의 모습

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

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

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

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

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

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

/ufeff

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

엑셀파일 한글 깨짐 - egselpail hangeul kkaejim
맨 앞에 붙여주기만 하면 돼서 정말 간단하게 코드를 수정할 수 있습니다.

마무리

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

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

엑셀로 .csv 포맷의 파일을 열 때 한글 깨짐 현상이 발생하는 경우가 있습니다.

  • CSV(Comma Saparated Values) : 영어 그대로 콤마(,)로 분리된 값을 가진 파일

엑셀에서 한글이 깨질 때 해결방법 2가지를 정리해봤습니다.

  • 1. 엑셀로 데이터를 불러올 때 인코딩 방식 변경 (CP949 → UTF-8)

  • 2. 메모장으로 열고 ANSI로 인코딩해서 저장하기

Before

엑셀파일 한글 깨짐 - egselpail hangeul kkaejim
한글깨짐 현상

After

엑셀파일 한글 깨짐 - egselpail hangeul kkaejim
한글깨짐 현상 해결

1번 엑셀로 데이터 불러와서 한글 깨짐 해결하기부터 설명하겠습니다.

1. 엑셀로 데이터 불러올 때 인코딩 방식 변경해서 해결하기

  • 엑셀 데이터 탭 > 텍스트/CSV 가져오기 > 파일 선택

엑셀파일 한글 깨짐 - egselpail hangeul kkaejim
busdata.csv 파일을 가져옵니다.
  • 파일을 불러오면 아래처럼 '파일 원본' 부분이 949: 한국어(CP949)로 되어 있고, 한글 부분은 깨져있습니다.
  • (아래 그림) 파일 원본(인코딩)을 949: 한국어 → 65001: 유니코드(UTF-8)로 바꿔주면 엑셀 한글 깨짐 문제가 해결
엑셀파일 한글 깨짐 - egselpail hangeul kkaejim
949: 한국어, 한글은 깨진 상태
  • 파일 원본(인코딩)을 65001: 유니코드(UTF-8)로 바꿔서 한글 깨짐 문제해결 완료

  • 하단에 '로드'를 눌러주면 정상적으로 한글을 불러옵니다.
엑셀파일 한글 깨짐 - egselpail hangeul kkaejim
정상적으로 나옵니다.

2. 메모장으로 .csv 파일을 열고 ANSI로 인코딩해서 저장하기

  • CSV 파일 우클릭 > 연결 프로그램 > 메모장으로 파일 실행
엑셀파일 한글 깨짐 - egselpail hangeul kkaejim
메모장으로 .CSV 파일 열기
  • 실행한 후에는 다른 이름으로 저장하기 메뉴로 들어갑니다.
  • 다른 이름으로 저장 위치 : 파일 > 다른 이름으로 저장 (단축키: Ctrl + Shift + S)
  • (아래) 인코딩 형식을 UTF-8 → ANSI로 변경해서 저장 
엑셀파일 한글 깨짐 - egselpail hangeul kkaejim
인코딩을 ANSI로 변경하고 엑셀로 해당파일을 열면 한글 깨짐이 해결 됩니다.
  • 이제 엑셀로 CSV파일을 열어도 한글이 정상적으로 나오는 걸 볼 수 있습니다.
  • 엑셀 한글깨짐 문제 해결 완료
엑셀파일 한글 깨짐 - egselpail hangeul kkaejim
한글 깨짐 현상 해결 !

궁금하신 사항은 댓글 남겨주세요.

감사합니다.