1. 문제 발생 배경
Unity에서 C# 스크립트를 작성하는 과정에서 반복적으로 UTF-8 인코딩 문제를 겪었다.
Visual Studio나 메모장을 통해 수동으로 인코딩을 바꾸는 번거로운 작업을 반복하다, 이 문제를 자동화하는 방법을 찾게 되었다.
2. 문제 원인: CP949로 저장되는 스크립트
Encoding.Default는 시스템의 로케일 설정에 따라 다르게 적용되는데, 한국어 Windows 환경에서는 CP949 (EUC-KR) 로 저장된다. 이런 상태에서 UTF-8로 저장하면 한글이 깨지는 현상이 발생한다.
3. 수동 해결 방법
3-1. 메모장을 통해 인코딩 지정 저장
- 새 스크립트를 생성할 때 메모장으로 열기
- [다른 이름으로 저장] 선택
- 인코딩: UTF-8 (서명 있음) 또는 UTF-8 (BOM) 선택
- 파일 확장자를 .cs로 지정하여 저장
3-2. Visual Studio 2022 인코딩 설정
- 메뉴: 도구 → 옵션 → 환경 → 문서
- "파일을 특정 인코딩으로 저장" 체크
- UTF-8 (서명 있음) 선택
- 이 설정을 하면 Visual Studio가 새로 저장하는 모든 파일을 UTF-8 with BOM으로 저장한다.
4. 자동 인코딩 적용 방법 (Unity Editor 스크립트 활용)
Unity에서는 새 스크립트를 만들 때 기본 인코딩이 CP949가 될 수 있다. 이 문제를 자동으로 해결하기 위해 Unity의 Editor 폴더에 다음과 같은 스크립트를 추가한다.
📁 Assets/Editor/UTF8EncodingFix.cs
using System.IO;
using System.Text;
using UnityEditor;
public class UTF8EncodingFix : AssetPostprocessor
{
static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets,
string[] movedAssets, string[] movedFromAssetPaths)
{
foreach (string assetPath in importedAssets)
{
if (assetPath.EndsWith(".cs"))
{
string fullPath = Path.Combine(Directory.GetCurrentDirectory(), assetPath);
string content = File.ReadAllText(fullPath, Encoding.Default);
// 이미 UTF-8 BOM이 있다면 스킵
if (!content.StartsWith("\uFEFF"))
{
File.WriteAllText(fullPath, content, new UTF8Encoding(true)); // true = BOM 포함
UnityEngine.Debug.Log($"Converted {assetPath} to UTF-8 with BOM");
}
}
}
}
}
✅ 이 스크립트는 Unity가 스크립트를 다시 로드할 때마다 프로젝트 내의 .cs 파일을 검사하여,
BOM이 없는 UTF-8 또는 CP949 인코딩된 파일을 UTF-8 with BOM 형식으로 자동 변환해준다.
윈도우와 유니티는 UTF-8 with BOM 인코딩을 선호하기에 UTF-8 with BOM 인코딩을 적용하기로 했다.
5. 결론
처음에는 사소한 문제처럼 보였지만, 한글이 깨지는 현상은 협업이나 배포 과정에서 큰 문제가 될 수 있다.
이처럼 초기 인코딩을 관리하는 것은 코드 품질 관리의 기본이며, 자동화할 수 있다면 반드시 자동화하는 것이 좋다.
'프로젝트 > IT 이야기' 카테고리의 다른 글
| [Tip] Flutter 개발 - Android Studio + Widgetbook로 UI만 빠르게 보는 개발환경 만들기 (0) | 2026.01.20 |
|---|---|
| [Tip] rg(ripgrep) 설치·사용 가이드 (공용 / Windows / PowerShell) (0) | 2026.01.18 |