프로젝트/IT 이야기

[Tip] Unity 개발 중 스크립트 인코딩 문제 (CP949 → UTF-8) 해결 기록

dokwang82 2025. 5. 31. 20:16

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. 결론

처음에는 사소한 문제처럼 보였지만, 한글이 깨지는 현상은 협업이나 배포 과정에서 큰 문제가 될 수 있다.
이처럼 초기 인코딩을 관리하는 것은 코드 품질 관리의 기본이며, 자동화할 수 있다면 반드시 자동화하는 것이 좋다.