ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • csv 한글 깨짐 납품하고 나서 오는 연락
    외주개발 2026. 9. 20. 09:12

    csv 한글 깨짐은 파일 맨 앞 3바이트 때문인데, 그것만 고친다고 납품이 끝나지 않는다.

    크롤링 외주 결과물을 넘기면 제일 많이 오는 연락이 이거였다. 내 맥에서는 멀쩡한데 받는 쪽에서 깨진다

    다음에서 csv 한글 깨짐을 검색한 결과

    왜 깨지냐면 — 3바이트

    CSV 파일에 인코딩 정보가 없어서 생기는 문제

    CSV 는 그냥 텍스트라서 인코딩 정보를 안 담는다. 그래서 여는 프로그램이 추측한다

    윈도우 엑셀은 기본적으로 CP949 로 추측한다. 파일이 UTF-8 이면 그 추측이 틀린다

    같은 내용을 인코딩만 바꿔 저장해보면 차이가 눈에 보인다.

    같은 CSV를 세 가지 인코딩으로 저장했을 때 파일 크기와 첫 바이트 비교

    utf8_nobom.csv    80바이트    ec 9d b4
    utf8_bom.csv      83바이트    ef bb bf   ← BOM
    cp949.csv         64바이트    c0 cc b8

    ef bb bf 세 바이트가 "이건 UTF-8 이다"라고 알려주는 표식이다. 파이썬이면 utf-8-sig 로 저장하면 붙는다

    여기까지는 검색하면 다 나온다. 문제는 그다음이다

    인코딩을 맞춰도 남는 것

    납품하면서 걸린 게 인코딩만이 아니었다.

    인코딩 외에 CSV 납품에서 걸리는 세 가지

    ① 쉼표가 든 값

    금액에 쉼표를 넣으면 CSV 가 알아서 따옴표로 감싼다.

    금액
    "1,200,000"

    이게 정상 동작이다. 그런데 받는 쪽에서 다른 프로그램에 넣으면 따옴표째 들어가는 경우가 있다

    숫자를 넘길 거면 쉼표를 빼고 순수한 숫자로 주는 게 안전하다. 보기 좋으라고 넣은 쉼표가 상대 시스템을 막는다

    ② 줄바꿈

    CSV 는 기본이 CRLF(\r\n)다. 맥에서 만든 파일이 LF 로만 끝나면 어떤 프로그램은 줄을 못 나눈다

    데이터 안에 줄바꿈이 들어 있으면 더 복잡해진다. 셀 하나가 두 줄로 쪼개진다

    ③ 파일명

    내용을 고쳐도 파일명이 깨지는 건 별개다. 특히 zip 으로 묶어 보낼 때 생긴다

    맥에서 압축 풀면 한글 파일명이 깨진다는 얘기는 따로 확인해봤다

    받는 쪽이 뭘 쓰느냐로 갈린다

    같은 파일인데 환경마다 다르게 열린다.

    윈도우 엑셀    BOM 없으면 CP949 로 읽는다 → UTF-8 이면 깨진다
    맥 엑셀        버전에 따라 동작이 다르다
    구글 시트      가져오기에서 인코딩을 고를 수 있다
    다른 프로그램   따옴표·줄바꿈 처리가 제각각이다

    어디서 열지 모르면 맞출 수가 없다. 그래서 납품 전에 묻는 게 제일 빠르다

    파일 형식 자체가 안 열리는 경우도 같은 종류다. 한글파일을 맥에서 여는 것도 변환 없이 되는 방법이 있다

    넘기기 전에 하는 것

    CSV 납품 전 확인 순서

    • 받는 쪽 환경을 묻는다. 윈도우인지 맥인지, 엑셀인지 다른 프로그램인지
    • 샘플 세 줄을 먼저 보낸다. 전체를 만들기 전에 열리는지 확인받는다
    • BOM 을 붙인다. 안 물어봤으면 붙이는 쪽이 안전하다
    • 숫자에서 쉼표를 뺀다. 보기 좋으라고 넣으면 상대 시스템이 막힌다
    • xlsx 로 줄 수 있으면 그게 낫다. 인코딩 문제가 아예 없다

    xlsx 가 항상 답은 아니다. 받는 쪽이 그 파일을 다른 프로그램에 넣을 거면 CSV 가 맞고, 그때는 위 항목을 챙기면 된다

    파일이 깨진 게 아니라 읽는 방법이 틀린 것이라, 대개 되살릴 수 있다. 다만 되살리는 건 받는 사람 몫이 된다

    정리하면

    • CSV 는 인코딩 정보를 안 담는다. 여는 쪽이 추측한다
    • BOM 3바이트가 그 추측을 막는다. 파이썬이면 utf-8-sig
    • 인코딩만 맞춰도 안 끝난다. 쉼표·줄바꿈·파일명이 남는다
    • 숫자에 쉼표를 넣지 않는다. 따옴표로 감싸지면서 상대 시스템에서 막힌다
    • 받는 쪽 환경을 먼저 묻는다. 모르면 맞출 수가 없다
    • 샘플 세 줄을 먼저 보낸다. 전체 납품하고 다시 만드는 것보다 싸다

    내 화면에서 멀쩡한 건 아무 의미가 없다. 납품은 상대 화면에서 끝난다

상호 앤디 · 대표 손영은 · 사업자등록번호 708-38-01407
경기도 안산시 상록구 해안로 705, 3동 1층 107호 · son970523@khu.ac.kr
Designed by Tistory.