[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 : 포맷에 맞게 문자열을 출력
'Programming > C, C++' 카테고리의 다른 글
C++ 파일 입출력 fstream ifstream ofstream (char배열, string) (0) | 2022.12.14 |
---|---|
C++ 타입(형) 변환 (Type conversion, Type Casting) (0) | 2022.12.14 |
C++ STL 컨테이너 Vector의 재할당 확인하기 (0) | 2022.12.11 |
C++ STL List의 저장 공간 (0) | 2022.12.11 |
C++ STL 반복자(iterator) 사용법 (0) | 2022.12.11 |