Visual Studio(VC++)에서 빌드 시 한글 때문에 에러가 발생과 콘솔(디버깅) 창에 한글이 깨져 나올 경우
안녕하세요.
최근에 Qt로 작업하다가 다시 Visual Studio 2022(VC++)로 확인할 것이 있어 설치해서 소스코드를 확인하다가 한글 출력에 이슈가 있어서 확인한 내용을 남깁니다.
이미 다른 분들도 올린 내용이 있지만, 한글 처리 부분에도 여러 가지 경우가 있다 보니 그중에 이와 유사한 경우가 있지 않을까 해서 정리해 보았습니다.
1. 문제 되는 부분 1
VC++ 코딩 중에 간단하게 printf로 한글을 출력을 출력하려고 간단하게 코드를 작성합니다.
확인 삼아 컴파일을 해보니, 아래와 같이 에러가 발생했습니다. 한글만 없으면 문제없이 컴파일이 되었습니다.
"파일에 0x64 오프셋에서 시작하는 문자가 포함되어 있습니다. 이 문자는 현재 원본 문자 집합에서 잘못된 문자입니다(코드 페이지 65001)."
"상수에 줄 바꿈 문자가 있습니다."
2. 문제 1의 해결방법
파일에 인코딩을 설정이 필요해서 설정을 바꿔 주었습니다.
도구->옵션->환경->문서->특정 인코딩을 사용하여 파일저장
"한국어-코드페이지 949"로 되어 있는데, 이것을 "유니코드(서명 있는 UTF-8) - 코드 페이지 65001"로 변경하고 저장합니다.
다시 컴파일하면 오류는 사라집니다.
3. 문제 되는 부분 2
끝났다고 생각하지만, 위와 같이 설정을 바꾸고 콘솔창에서 결과를 보면 깨진 문자로 나옵니다.
4. 문제 2의 해결방법
인터넷 검색에 콘솔창에 chcp 65001 입력하라고 하는데 실행한 창에서는 입력할 수가 없기 때문에 코드상에 입력하는 방법을 찾았습니다.
첫 번째로 SetConsoleOutputCP 함수로 실행하는 방법이 있습니다.
<windows.h> 파일을 추가하고 SetConsoleOutputCP 함수를 이용하면
#include <stdio.h>
#include <windows.h>
int main(void)
{
SetConsoleOutputCP(65001);
...
}
두 번째는 system() 함수를 이용하는 것입니다.
system("chcp 65001 > nul");
위와 같이 둘 중 한 가지를 사용하면 콘솔창에 한글이 출력되는 것을 확인했습니다.
모든 부분의 해결책이 아니라, 유사한 경우 이렇게 되는 방법도 있구나 참고되었으면 합니다.
감사합니다.
<참고사이트>
1. [C++] 윈도우 콘솔에서 UTF-8 출력하기
https://kukuta.tistory.com/291