반응형
CP949 vs UTF-8
매번 헷갈리는 CP949와 UTF-8에 대해서 알아보자. 매번 까먹을 때마다 기억하기 위해서 보고 또 보도록 하자.
항목 | CP949 | UTF-8 |
정식 명칭 | Code Page 949 (확장 완성형 한글) | 8-bit Unicode Transformation Format |
문자 범위 | 한글 중심 (한자/기타 제한적) | 전 세계 모든 문자 |
바이트 수 | 1~2바이트 | 1~4바이트 |
표준 여부 | 비표준 (MS 전용) | 국제 표준(Unicode) |
운영체제 호환 | Windows에서 주로 사용 | 거의 모든 OS/플랫폼에서 사용 |
호환성 | Windows 전용 파일이기 때문에 제한적 | 전 세계 범용, 웹/API에서 필수 |
BOM 사용 | 사용하지 않음 | 선택적으로 사용 |
비주얼 스튜디오에서 생성한 파일은 기본적으로 CP949 인코딩의 파일이다. 아무래도 CP949는 Windows 전용 인코딩이다 보니 다른 운영체제를 사용하는 사람들과의 협업하기에 적합하지 않다. 그렇기 때문에 이를 국제 표준인 UTF-8로 변환해서 사용하는 것이 일반적이다.
'파일' -> '다른 이름으로 '현재 파일명' 저장' 메뉴 클릭
CP949 파일로 저장
// CP949로 파일 저장 (StreamWriter)
var encoding = Encoding.GetEncoding("ks_c_5601-1987"); // 또는 "CP949"
File.WriteAllText("hello.txt", "안녕하세요", encoding);
UTF-8 파일로 저장
추가적으로 UTF-8은 선택적으로 BOM(Byte Order Mark)를 가지는데 BOM 없이 저장하는 것이 웹 표준이다.
File.WriteAllText("hello.txt", "안녕하세요", Encoding.UTF8); // UTF-8 with BOM
File.WriteAllText("hello.txt", "안녕하세요", new UTF8Encoding(false)); // UTF-8 without BOM
“서명 없는 UTF-8 (UTF-8 without BOM)”을 사용하자
“서명 없는 UTF-8 (UTF-8 without BOM)”이 협업에 가장 안전하고 널리 쓰이는 인코딩이다.
- 대부분의 시스템은 "BOM 없는 UTF-8"을 기본으로 처리
- 리눅스 쉘, Docker, Git (BOM이 있으면 스크립트 실행 실패)
- 웹 브라우저(HTML/JS) BOM 있으면 CSS, JS 깨질 가능성이 있음
- JSON 파서(Node.js, Python, Java)
- Git diff, lint, CI (BOM으로 인한 변경 감지)
- BOM은 보이지 않지만 "숨은 문제"를 일으킴
- Git, Shell, JSON 등은 BOM이 있으면 오작동하거나 충돌이 발생할 수 있음
정리하자면
- CP949는 윈도우 전용 인코딩
- UTF-8은 국제 표준 인코딩
- 불특정 다수와 협업할 때는 국제 표준인 UTF-8(서명 없는)을 사용하자.
함께 읽으면 좋은 글
C# 컴퓨터가 문자를 표현하는 방법, 문자 인코딩
string에서 byte[]로 변환하기string 타입에서 ToCharArray() 함수를 통해서 바로 Char배열로 변환하는 함수는 존재하지만 ToByteArray() 함수는 존재하지 않는다. 그 이유는 무엇일까? 그 이유는 byte[]로 변환
jettstream.tistory.com
'프로그래밍' 카테고리의 다른 글
HTTP Header에는 한글이 포함될 수 없다! Header로 데이터 보내기 (0) | 2025.04.12 |
---|---|
로커스트(Locust) @task vs tasks 비교해보자 (0) | 2025.04.09 |
토큰으로 검증하자! JWT(JSON 웹 토큰) (0) | 2025.04.07 |
일단 호출하고 보자! 덕 타이핑(Duck Typing)이란? (0) | 2025.04.04 |
Python 코드로 테스트 가능한 로커스트(Locust) (0) | 2025.04.03 |
댓글