반응형

파이썬으로 CSV를 다루다 보면 한글 깨짐 문제를 자주 만나게 된다.

특히 엑셀에서 열었을 때 글자가 이상하게 보이면 encoding 문제일 가능성이 크다.

이 글에서는 파이썬 한글 CSV 깨짐 해결 방법을 가장 기본적인 형태로 정리해본다.

 

- 왜 한글이 깨질까

파일 자체는 정상인데 읽는 프로그램이 다른 문자 인코딩으로 해석하면 한글이 깨질 수 있다.

파이썬에서는 주로 utf-8을 많이 쓴다.

하지만 윈도우 환경이나 오래된 프로그램은 cp949를 쓰는 경우도 많다.

엑셀에서는 utf-8-sig가 더 안전한 경우가 많다.

 

- CSV 저장할 때 가장 많이 쓰는 방식

import csv

rows = [
    ["이름", "메모"],
    ["민수", "테스트 데이터"],
    ["지은", "한글 저장 확인"]
]

with open("korean.csv", "w", newline="", encoding="utf-8-sig") as file:
    writer = csv.writer(file)
    writer.writerows(rows)

 

- 이미 저장된 파일을 읽을 때

상대가 어떤 인코딩으로 저장했는지 모르면 하나씩 시도해봐야 한다.

import csv

with open("korean.csv", "r", newline="", encoding="utf-8-sig") as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

만약 깨진다면 cp949로 다시 시도할 수 있다.

import csv

with open("korean.csv", "r", newline="", encoding="cp949") as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

 

- utf-8, utf-8-sig, cp949 차이

  • utf-8은 가장 일반적인 인코딩이다.
  • utf-8-sig는 엑셀에서 한글 깨짐을 줄일 때 자주 쓴다.
  • cp949는 윈도우 환경에서 오래전부터 많이 쓰인 한글 인코딩이다.

 

- 실무에서는 어떻게 처리하면 되나

  1. 내가 새로 만드는 CSV는 utf-8-sig로 저장한다.
  2. 외부에서 받은 CSV는 utf-8-sig와 cp949를 순서대로 확인한다.
  3. 엑셀로 열어봐야 한다면 utf-8-sig를 우선 고려한다.

 

- 정리하며

파이썬 한글 CSV 깨짐 해결의 핵심은 인코딩이다.

새 파일을 만들 때는 utf-8-sig를 쓰고 외부 파일은 utf-8-sig와 cp949를 먼저 의심하면 된다.

반응형

+ Recent posts