UTF-8 이 95% 맞아
현대 파일 UTF-8. 현대 웹 프로토콜 UTF-8. 현대 소스 코드 UTF-8. 다른 거 쓸 특정 이유 (legacy 데이터, 시스템 제약) 없으면 UTF-8 이 맞는 디폴트. 나머지 5% — Windows legacy 파일, CP949 내뱉는 한국 Windows 도구, 옛 Excel export — 진짜이고 만나, 근데 예외.
BOM — 왜 존재
byte-order mark (BOM) 은 파일 시작의 특수 글자 — 인코딩 신호. UTF-8 은 별로 안 필요 (인코딩이 명확) 하지만 Windows 소프트웨어가 종종 어쨌든 써. utf-8-sig 가 읽기 인코딩이면 있을 시 BOM skip. utf-8 은 데이터 시작에 리터럴 글자로 둠.
뭐 잘못되나 — 증상 읽기
UnicodeDecodeError 가 지정한 인코딩에 유효하지 않은 바이트 디코딩 시도 의미. 흔한 원인 — 파일이 사실 UTF-16 또는 CP1252 인데 UTF-8 시도, 파일이 바이너리인데 텍스트 모드 시도, 멀티바이트 글자가 반으로 잘림. 에러 읽어 — 바이트 위치 + 문제 바이트 알려줘.
chardet — 진짜 모를 때
pip install chardet 가 바이트 샘플에서 인코딩 추측 라이브러리 줘. 미스터리 파일 일회성 import 에 유용. production path 에 두지 마 — 추측은 확률, 보장 X.
원칙: 텍스트 파일 열 때 항상
encoding 지정. 시스템 디폴트는 플랫폼 특정 + 크로스플랫폼 코드 물려. 양쪽 끝 다 제어하면 encoding="utf-8". 아니면 실제 인코딩 매치.