본문 바로가기
언어와 프레임워크/Java

[JAVA] Intellij JDK 한글 깨짐 (Open JDK18 이전, 이후 나눔)

by Unagi_zoso 2022. 7. 14.

사건 발단

 

'본 글은 windows10 환경에서 Intellij를 사용하며 겪었던 한글 깨짐 문제의 회고입니다.'

 

 

Intellij를 사용하는데 openJDK 18 버전을 깔고나서 뭔 짓을 해도 콘솔에서 한글 출력이 (UTF-8 인코딩) 안 됐습니다.

찾아보니 18에 들어오면서 UTF-8 인코딩에 있어 살짝 변경이 있었습니다.

 

 

해결 방안

 

Open JDK 18 이전

 

Intellij의 상단 내비게이션 바의 File - Settings에 들어가서 File Encoding 메뉴의

Global Encoding, Project Encoding 그리고 Proprties Files를 UTF-8로 맞춥니다.

 

이후 Intellij 상단 내비게이션 바의 help 탭에서 Edit custom VM options부분을 클릭하여 다음 값을 추가합니다.

 

-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8

이후 Intellij를 재시작합니다.

 

 

Open JDK 18

 

선호 방식 (JVM에 콘솔 인코딩 옵션을 추가합니다.)

 

 

Intellij 우측상단을 통해 dit Configurations에 들어갑니다.

 

 

 

 

Modify options를 선택한 다음, MV options을 선택합니다. 이후 다음 옵션을 추가합니다.

 

 

-Dfile.encoding="UTF-8" -Dsun.stderr.encoding="UTF-8" -Dsun.stdout.encoding="UTF-8"

 

이후 Java18이전에서 했듯이 

Intellij의 상단 내비게이션 바의 File - Settings에 들어가서 File Encoding 메뉴의

Global Encoding, Project Encoding 그리고 Proprties Files를 UTF-8로 맞춥니다.

 

 

 

비선호 방식 (시스템 변수로 설정합니다. 느려짐의 원인이 될 수도 있어 비선호합니다.)

더보기

19이전의 방식에서 봤떤 Edit custom VM options에 다음 문장을 추가하시면 됩니다.

 

-Dfile.encoding=UTF-8 
-Dsun.stdout.encoding=UTF-8 
-Dsun.stderr.encoding=UTF-8

 

또 다른 방법으로는

환경 변수의 시스템 변수에서 JDK설치 시 설정해 둔 JAVA_TOOL_OPTIONS가 있을 것입니다.

없다면 생성하시면 됩니다. 이 때 이 값에 

-Dfile.encoding="UTF-8" -Dsun.stdout.encoding="UTF-8" -Dsun.stderr.encoding="UTF-8"

다음 값을 추가하신 후 사용하시는 Intellij를 재시작하면 되겠습니다.

 

 

 

 

 

 

 

 

원인

 

JAVA18로 오면서  표준 Java API의 default charset이 UTF-8로 지정되었습니다.(https://openjdk.org/jeps/400)

UTF-8가 표준 Java API의 default가 되지만, console I/O는 제외됩니다.

Intellij의 console 설정을 UTF-8로 한 들, PrintStream(우리가 console에서 사용하는 스트림 ex. System.out)은

UTF-8로 설정되지 못한 것 입니다. (한글 Windows의 console 인코딩은 default로 cp949를 사용합니다.)

그리고 제가 위에서 설정한 세 값들이  표준 output의 charset인 것이다.

 

한 가지 걸리는 게 있다면 참고했던 글에서는 값을 입력한 세 요소가 지원을 받지 못하는 위치에 있는 요소이다 보니

이 방법을 사용해도 된다. 안 된다. 갈리는 입장이 나왔습니다.

현업에서 이러한 일이 발생되었다면 다른 분들에게 조언을 구해 이 방식을 적용해도 괜찮을 지 물어보는 것 도 

좋아 보입니다. 

 

 

다음 글들을 참고하였습니다.

 

 

https://stackoverflow.com/questions/71685543/java-jdk-18-in-intellij-prints-question-mark-when-i-tried-to-print-unicode-l

https://openjdk.org/jeps/400

https://bugs.openjdk.org/browse/JDK-4971166

 

읽어주셔서 감사합니다. 틀린 부분이나 부족한 부분이 있다면 말씀해주세요. 감사합니다.

댓글