본문 바로가기
320x100
320x100

상황

#include <stdio.h>

int main(void) {
    printf("Hello, World!\n");
    printf("안녕하세요\n");
    
    return 0;
}

위 코드의 출력 결과를 봤더니 한글이 깨지는 상황

한글 깨짐

지식

윈도우는 EUC-KR을 확장한 CP949(or MS949 or x-windows-949) 방식으로 시스템 기본 인코딩을 씁니다.

 

윈도우가 사용하는 표준이 아닌 또 다른 대표적인 표준 인코딩으로는 UTF-8(가변길이 8bit Unicode 변환 포맷)이 있습니다.

UTF-8, UTF-16, UTF-32 등이 있지만 2026년 현재에도 UTF-8을 가장 많이 사용하고 있습니다.

 

자 생각해보세요!

파일을 작성한다는 것은 WRITE, 콘솔이나 화면에 출력한다는 것은 READ이죠?

즉, Write 할 때와 Read 할때 인코딩 방식이 서로 다르면 외계어처럼 보이게 됩니다.

쓸 때는 미국말로 썼는데, 읽을 때는 한국말로 읽는 것과 같은 이치이죠.

 

그리고 대학생분들이 1,2학년때 C언어로 팀플이나 텀프를 하면서 다른 운영체제를 쓰는 선후배와 소스코드를 파일로 주고 받는데

막상 받아보니 ????exx??? 이런식으로 다 깨진 경우가 있을 거에요.

특히 영어로 작성된 부분은 제외하고, 한글로 작성된 코드나 주석부분이요!

 

원인

그래서 위와 같은 상황이나 한글이 콘솔에서 깨지는 부분은 윈도우의 기본 한글 인코딩 방식(CP949)과 기타 OS에서의 기본 인코딩 방식(UTF-8), 그리고 CLion의 인코딩 방식(UTF-8)과 달라서 발생합니다.

 

CLion을 맨 처음 설치하면 우측 하단에 UTF-8이라고 써 있는걸 볼 수 있습니다. 이건 파일 인코딩이죠.

해당 .c나 .cpp 확장자로 된 파일을 UTF-8로 작성하겠다(Write)라는 뜻이에요.

쓰기와 달리 읽는(Read) 건 콘솔에 출력하는거라, 시스템 기본 표준 인코딩인 CP949로 읽은거죠.

다시 말해서, 쓸 때는 프랑스어로 작성하고 읽을 때는 한글로 읽은 겁니다!

 

아래부터는 반말체와 음슴체, 존대를 섞어서 쓰겠다..ㅎ 아무래도 편한게 편한듯?

안 되는 해결방법

CMakeLists.txt에 FLAGS 설정하기

 

다른 블로그를 보니까  CLion 과거버전으로는 됐었던 것 같다.

set(CMAKE_C_FLAGS "-fexec-charset=CP949")

 

이 설정을 추가하는건데.. spring을 배운 사람이라면 어떤 빌드 스크립트를 수정하면 우측 상단에 새로고침 버튼이 나타나는데, 그걸 클릭하거나 단축키를 눌러야 설정이 적용된다.

그걸 클릭하는 순간 에러가 떠서 설정이 안 됐다.

전체 코드

cmake_minimum_required(VERSION 4.2)
project(c_study C)

set(CMAKE_C_STANDARD 17)
#set(CMAKE_C_FLAGS "-fexec-charset=CP949") # 이 설정 안됨!!

add_executable(c_study main.c)

스크립트 수정후 반영 실패

만약 잘 됐다면 아래처럼 나와야 한다.

스크립트 수정 성공한 경우 - 바뀐건 없음

 

안 좋은 해결방법

파일 인코딩 CP949(x-windows-949)로 바꾸기

 

위에서 배운 건

     작성한 파일 인코딩: UTF-8(CLion의 현재 설정) <-> 내가 콘솔에서 출력한 인코딩: CP949(Windows의 기본 설정)

이었다.

그렇다면 작성한 파일 인코딩을 CP949로 바꾸면 해결되지 않을까?

    작성한 파일 인코딩: CP949 (CLion의 설정 변경) <-> 내가 콘솔에서 출력한 인코딩: CP949(Windows의 기본 설정)

해결 할 수 있다. 해보자. 우측 하단에 File Encoding(한글은 파일 인코딩)이라고 적힌 부분을 클릭하고 More를 누르자.

파일 인코딩
x-windows-949

스크롤을 쭉 내려서 x-windows-949를 찾아서 클릭하자.

알림창

그러면 위와 같은 화면을 볼 수 있는데, 배운 그대로다.

Reload는 현재 작성된 파일을 UTF-8 인코딩으로 두고, x-windows-949로 읽는 방식만 바꾼다는 뜻이다.

Convert는 현재 작성된 파일을 x-windows-949 인코딩으로 재작성한다는 뜻이다.

Reload를 누르거나 Convert를 누르거나, 파일 에디터창에는 바뀐게 없어 보일 것이다. 하지만 컴퓨터 내부에서는 다른 동작이 일어난다.

우리는 Convert를 해야 이 문제를 해결할 수 있다. 클릭해보자.

수정 후
해결

 

하지만, 이 방법은 큰 문제가 있다. 팀 프로젝트를 하거나 내가 만든 파일을 다른 OS를 쓰는 사람한테 공유할 경우에 깨질 수 있다.

왜냐하면 이제는 내가 CP949로 작성했고, 다른 사람이 UTF-8로 읽는 경우에 깨질 수 있는거다^^.

모든 팀원들, 조교님, 교수님 다 윈도우를 사용한다면 상관 없겠지만...

그렇지 않을 경우까지는 커버하지는 못한다.

그래서 다음 찐 해결책으로 넘어가보자.

해결방법 <- 요걸로 하세요!

Windows 언어 설정 - 추가옵션 활성화

Windows 설정 > 언어 및 지역 > Windows 표시 언어 끝에 아래 방향 화살표 클릭
  > Beta: 세계 언어 지원을 위해 Unicode UTF-8 사용 활성화

설정
UTF-8 사용 활성화
성공

이 옵션을 활성화하면 CLion 내에서 어떤 설정을 바꾸지 않더라도, 한글이 깨지지 않고 잘 나온다!

이 옵션은 CLion 소스파일, 프로그램 출력 문자열, Windows 기본 코드 페이지 등을 UTF-8 인코딩으로 보여주는 옵션이다.

 

이 방법을 제일 추천하지만... 아주 작은 단점이 있다. 혹시 오래된 Windows 프로그램을 사용하고 있거나, 한국어 CP949를 전제로 만든 프로그램이나 일부 회계/공공기관/레거시 프로그램을 사용하고 있다면 이 옵션을 켰을 때 오히려 글자가 깨지거나 파일을 잘못 읽을 수도 있다.

최근에 산 노트북이거나 PC에서 굳이 예전 프로그램을 사용할 일이 없다면 그냥 이 속성을 켜 두고, 옛날 프로그램을 쓰거나 찝찝하다면 CLion 등에서 한글이 깨질 때만 활성화를 하고, 그냥 비활성화하면 될 것 같다!

 

하고싶은 말

나도 블로깅을 안 한지 오래 됐지만.. 요즘 글들을 보면 죄다 AI가 만들어주고 기존의 글들은 원인 분석도 없이 문제 해결만 딱 있는 글들이 있다. 그게 좋은 결과로 이어질지는 판단도 안하고..ㅠ

나도 AI를 쓰고는 있지만, 여전히 내가 어떤 과정으로 실패를 했고 성공을 했고, 해결로 끝난 게 아니라 더 좋은 해결책을 찾고 원인분석도 하고 내가 아는 지식을 사용하고 몰랐던 지식을 채운다. 이게 옳은 방향이라고 지금도 믿고 있다.

여러 대학생들을 멘토링을 할 때도 AI를 잘 쓰는건 좋지만 배울 때는 어느정도 지양하거나 의존하지 말고 지식 확인용으로만 사용하라고 말을 한다.

더 놀라운 건 현업자들 대상으로 멘토링을 할 때도 AI가 다 해주니까 손으로 어떻게 해야하는지 모른다는 분들이 있었다.

시니어들이나 5년차 이상이면 CLAUDE.md나 로컬 설정으로 필수로 해야 되는 것들, 필수로 하지 말아야 하는 것들, 커스텀 스킬 등을 만들고 쓰라고 한다.

리뷰를 직접 할 수 있는 경험과 지식이 있기 때문이다.

하지만 프로그래밍을 처음 배우거나 새로운 언어를 배울 때는 AI에만 의존하지 않고 비판적인 사고로 여러가지 답을 찾고 자기 생각을 정리할 수 있어야 한다고 생각한다.

728x90
320x100

댓글