본문 바로가기
Programming/C, C++

C++ 한글 문자, 한글 문자열 출력 wchar_t

by Dev_카페인 2022. 12. 13.
반응형

[C/C++] 한글 문자, 한글 문자열 출력 wchar_t

기존 char 형식은 ASCII 코드를 표현할 수 있는 문자 형식이다.

ASCII코드는 128가지의 문자를 표현하므로 1byte의 크기로 다 표현 가능하다.

하지만 한글을 표현하기에는 1byte크기로 부족하다. 2byte형식의 자료형이 필요한데, 그 크기를 지원하는 데이터 형식이 wchar_t이다.

 

기존 char 형식으로 한글 문자를 출력하게 된다면 컴파일러는 ‘ㄱ’의 시작 주소부터 2byte를 읽어 엉뚱한 문자를 출력하게 될 것이다.

#include <stdio.h>//표준 입출력 헤더
int main()
{   
    char ch = 'ㄱ';
    printf("%c\n", ch);
    return 0;
}

2011년 ISO(국제 표준화 기구)에서 각 지역에 맞는 언어를 사용할 수 있도록 wchar_t 문자형식을 제공하길 권고하는 C11을 제시했다.

wchar_t형식 문자를 표현할 때는 대문자 ‘L’과 함께 문자 표현을 사용한다. (예: L’홍’)

wchar_t형식 문자열를 표현할 때도 대문자 ‘L’과 함께 문자열 표현을 사용한다. (예: L”홍길동”)

wchar_t의 기본적인 사용법은 다음과 같다.

#include <stdio.h>
int main()
{
    wchar_t ch = L'ㄱ';
    wprintf(L"%c\n", ch);  // 출력 안됌
    return 0;
}

하지만 위와 같이 작성할 경우 char동작과 유사하게 동작할 때가 많다.

그 이유는 위에서 말했던 것과 같이 ISO에서는 각 나라에 맞게 사용할 수 있도록 권고했다.

그러므로 wchar_t는 한국만 사용하는 형식이 아닌 것이다.

그래서 wchar_t를 사용할 때에는 지역이 어디인지 명시해주어야 알맞게 출력이된다.

#include <stdio.h>
#include <locale.h>
int main()
{   
    wchar_t ch = L'ㄱ';
    setlocale(LC_ALL, "KOREAN");
    wprintf(L"%c\n", ch);
    return 0;
}  // 출력 완료

주의할 점은 표준 입출력 헤더와 locale.h 헤더를 추가해 주고 지역 문자의 범위를 지정해줘야 한다.

setlocale 함수를 사용하여 전체 영역 적용을 의미하는 LC_ALL을 적어주고 한국 지역을 선택한다.

 

그 외

putwchar : 문자 한 개를 출력

_wputs : 개행을 포함하여 문자열을 출력

wprintf : 포맷에 맞게 문자열을 출력

반응형