Skip to content

fix: Java/Kotlin 실행 결과 UTF-8 인코딩 강제 (이슈 #4)#5

Merged
dj258255 merged 1 commit into
mainfrom
fix/runtime-output-encoding
Jun 21, 2026
Merged

fix: Java/Kotlin 실행 결과 UTF-8 인코딩 강제 (이슈 #4)#5
dj258255 merged 1 commit into
mainfrom
fix/runtime-output-encoding

Conversation

@dj258255

Copy link
Copy Markdown
Owner

이슈 #2(컴파일 인코딩)에 이은 후속으로, 실행 출력 단계의 인코딩을 처리합니다.

문제

한글을 반환/출력하는 코드를 실행하면 자식 java 프로세스의 표준 입출력이 Windows 기본 코드페이지(MS949)로 인코딩되고, 플러그인은 출력 스트림을 JVM 기본 charset으로 읽어 어긋날 경우 결과 한글이 깨집니다.

변경

  • javaCommand 헬퍼 추가 — java 실행에 -Dfile.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8 전달 (runJava 3곳, runKotlin 1곳에 적용)
  • executeProcess의 프로세스 입력 쓰기 / 출력·에러 스트림 읽기를 Charsets.UTF_8로 명시
  • javaCommand가 인코딩 플래그를 항상 포함하는지 검증하는 회귀 테스트 추가

검증

  • ./gradlew test --tests com.codingtestkit.service.CodeRunnerTest → 31개 전부 통과

⚠️ 한계 (리뷰 시 참고)

실행 출력 깨짐은 native.encoding이 MS949인 실제 Windows에서만 재현됩니다. JDK 18+에서는 macOS/Linux의 stdout.encoding을 명령행 -D로 오버라이드할 수 없어, 깨짐을 시뮬레이션하는 end-to-end 테스트가 불가능합니다. 그래서 회귀 테스트는 커맨드 구성(플래그 포함 여부)을 검증합니다. 실제 Windows 환경에서의 한글 출력 확인이 추가로 필요합니다.

Fixes #4

Windows 기본 코드페이지(MS949 등)에서 한글을 반환/출력하는 코드의 실행 결과가
깨지는 문제를 해결한다.
- javaCommand 헬퍼로 java 실행에 -Dfile/stdout/stderr.encoding=UTF-8 전달
- executeProcess의 프로세스 입출력 스트림 읽기/쓰기를 UTF-8로 명시
- javaCommand가 인코딩 플래그를 항상 포함하는지 회귀 테스트 추가

실행 출력 깨짐은 native.encoding이 MS949인 실제 Windows에서만 재현되며,
macOS/Linux에서는 -Dstdout.encoding 오버라이드가 먹지 않아 커맨드 구성
검증으로 회귀를 방지한다.
@dj258255 dj258255 merged commit ec273a9 into main Jun 21, 2026
1 check passed
@dj258255 dj258255 deleted the fix/runtime-output-encoding branch June 21, 2026 18:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Windows에서 한글을 반환/출력하는 코드 실행 시 결과 인코딩 깨짐 가능성

1 participant