블로그 목록으로
텍스트 편집
2026년 5월 8일

BOM(Byte Order Mark) 제거 방법과 텍스트 파일 인코딩

UTF-8 BOM이 발생시키는 문제와 원인, 편집기·명령줄로 BOM을 제거하거나 추가하는 방법을 설명합니다.

Q.UTF-8 BOM이란 무엇이고 어떻게 제거하나요?

BOM(Byte Order Mark)은 파일 앞에 붙는 3바이트(EF BB BF) 시그니처로, UTF-8 파일임을 표시합니다. CSV 첫 열 이름 오류, PHP 헤더 오류, JSON 파싱 실패의 원인이 됩니다. VS Code에서는 '다른 이름으로 저장 → UTF-8'(BOM 없음)으로 제거합니다.

BOM 제거UTF-8 BOMByte Order Mark텍스트 인코딩

CSV 파일을 열었더니 첫 번째 열 이름이 "이름" 처럼 이상한 문자로 시작한다면 UTF-8 BOM이 원인이다. BOM은 파일 맨 앞에 자동으로 붙는 3바이트(0xEF 0xBB 0xBF) 마커로, 사용자 눈에는 보이지 않지만 프로그램이 읽을 때 문제를 일으킨다.

BOM의 역할과 문제

BOM은 원래 UTF-16·UTF-32에서 바이트 순서(Big-endian/Little-endian)를 구분하기 위해 만들어졌다. UTF-8은 바이트 순서가 고정되어 있어 BOM이 불필요하다. 그럼에도 Windows 메모장과 일부 Microsoft 도구는 UTF-8 파일에 BOM을 자동으로 추가한다.

BOM으로 발생하는 문제상황
CSV 첫 열 이름 앞에 문자 추가Excel·Python pandas 읽기
PHP headers already sent 오류PHP 파일 첫 줄에 BOM
JSON 파싱 실패json.loads() BOM 미지원
HTML 렌더링 오류 앞에 BOM
Git diff 오염변경 없이 BOM 추가됨으로 표시

BOM 확인 방법

16진수 에디터: 파일 시작이 EF BB BF이면 UTF-8 BOM.

Linux/Mac 터미널:

bash
file -i myfile.csv
# 출력: text/plain; charset=utf-8 (BOM 없음)
# 또는: text/plain; charset=utf-8-bom (BOM 있음)

PowerShell:

powershell
$bytes = [System.IO.File]::ReadAllBytes("myfile.csv")
$bytes[0..2] | ForEach-Object { "{0:X2}" -f $_ }
# EF BB BF → BOM 있음

BOM 제거 방법

VS Code

우측 하단 인코딩 클릭 → UTF-8(BOM 없음) 선택 → 저장. UTF-8 with BOMUTF-8을 구분해야 한다.

Notepad++

인코딩 메뉴 → UTF-8 (BOM 없이 인코딩 선택 → 저장.

PowerShell (일괄 처리)

powershell
$files = Get-ChildItem -Recurse -Filter "*.csv"
foreach ($f in $files) {
    $content = Get-Content $f.FullName -Encoding UTF8
    [System.IO.File]::WriteAllLines($f.FullName, $content)
}

Python

python
with open("input.csv", encoding="utf-8-sig") as f:
    content = f.read()  # BOM 자동 제거
with open("output.csv", "w", encoding="utf-8") as f:
    f.write(content)

BOM이 필요한 경우

Windows 환경에서 Excel로 CSV를 열 때 한글이 깨지는 경우, BOM이 오히려 필요하다. Excel은 BOM이 있어야 UTF-8 파일을 올바르게 인식한다. 이 경우 encoding="utf-8-sig" 로 저장하면 BOM이 포함된다.

---

이 글은 AI가 공개 자료를 기반으로 작성했습니다. 파일 인코딩 변환 전 원본 백업을 권장합니다.

텍스트 편집 도구 사용하기

바로 가기 →

관련 글

추가 참고 자료

다른 글 보기