C언어 한국어 입출력, Unicode 값 추출
C언어에서 wchar_t 자료형을 활용하여 한글을 출력하는 방법과 한글 input을 받는 방법을
살펴보고, 원하는 글자의 유니코드 값을 확인하는 법에 대해서도 다루어보겠습니다.
C언어에서 한글 선언 및 출력 방법
C언어에서 한글 객체 및 한국어가 포함된 배열 선언과 출력 시의 유의 사항들은 다음과 같습니다.
1. 한글 객체 혹은 배열 선언은 wchar.h 모듈에 포함된 wchar_t 자료형을 사용하셔야 합니다.
2. wchar_t 배열 자료형 선언 및 출력 시에는 문자열처럼 쌍따옴표(" ")로 감싸는 것은 동일하나,
앞에 L을 붙여 L" " 형태로 감싸주셔야 한다는 점에 유의해주셔야 합니다.
(마찬가지로 1글자 객체의 경우에는 ' ' 대신 L' ' 형태로 감싸주셔야 합니다.)
3. 출력 시에는 wprintf 함수를 사용하게 되는데, 이 때 일반 문자열 양식의 %s가 아닌
대문자 S를 활용하여 %S로 지정해주셔야 정상적으로 출력되는 것을 보실 수 있습니다.
(마찬가지로 1글자 객체의 경우에는 %c 대신 %C로 포맷팅해주셔야 합니다.)
4. locale.h 모듈에 포함된 setlocale의 기능을 통하여 locale을 지정해주셔야
한글이 ?로 출력되는 현상을 방지할 수 있습니다.
위 유의 사항들을 토대로 한글 배열을 선언하고 출력해보는 예시는 아래와 같습니다.
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL,""); // ?로 출력되는 현상 방지
wchar_t arr[] = L"안녕하세요!"; // 한글 배열 선언
wprintf(L"%S",arr); // 대문자 S임에 유의
}
위 코드를 실행시켜보면 "안녕하세요!"가 정상 출력되는 것을 확인할 수 있습니다.
참고로, 객체나 배열에 저장된 한글이 아니라 printf 함수 내에서
고정된 글자를 출력하는 경우에는 wprintf를 사용하지 않아도 무방합니다.
#include <stdio.h>
int main()
{
printf("안녕하세요!\n"); // 고정된 글자를 내부에서 출력하는 것은 가능
}
C언어에서 한글 입력 방법
한글 입력의 원리도 일반 문자열 입력의 원리와 비슷하기는 하나, 한글 출력 때와 마찬가지로
scanf 대신 wscanf 함수가 사용되고, %s 대신 %S 포맷팅이 사용된다는 점,
그리고 " " 대신 L" "로 감싸야 한다는 점들이 다릅니다.
한국어 input을 받아본 뒤, 결과를 출력해보는 예시 코드는 다음과 같습니다.
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL,""); // ?로 출력되는 현상 방지
wchar_t arr[5] = L""; // 빈 한글 배열 선언
wscanf(L"%S", arr); // 한글 입력 받기, 대문자 S임에 유의
wprintf(L"입력 받은 결과 : %S\n",arr); // 한글 출력 시에도 대문자 S임에 유의
}
예를 들어, 위의 코드 실행 후 "가나다"를 입력하고 엔터를 누르면
"입력 받은 결과 : 가나다" 라는 메시지가 정상 출력되는 것을 볼 수 있습니다.
C언어에서 유니코드 값 확인 방법
특정 문자의 Unicode 값을 추출하는 원리는 아스키 코드의 값을 추출하는 원리와 동일합니다.
출력 시 %d로 포맷팅을 진행해주게 되면, 해당 문자 자체 대신 문자를 지정하는
유니코드의 번호가 출력되게 됩니다.(일반 printf 함수를 사용하셔도 됩니다.)
예시로, '가'라는 글자를 지정하는 유니코드의 값은 아래 코드로 확인이 가능합니다.
#include <stdio.h>
#include <wchar.h>
int main()
{
wchar_t ga = L'가'; // 1글자 객체 예시
printf("유니코드 값 : %d\n", ga); // %d로 포맷팅하여 유니코드 값 추출
}
실행 시, 출력 결과로 "유니코드 값 : 44032"가 나타난 것을 확인할 수 있습니다.
'C & C++' 카테고리의 다른 글
[C++] 문자열 string vs char 배열 선언 방식 비교 (0) | 2022.06.13 |
---|---|
[C언어] 정수 배열 및 문자열에서 중복 원소 찾기, 중복 제거 방법 (0) | 2022.06.06 |
[C언어] 구조체 struct 선언, 멤버 변수 할당 및 접근 방법 (0) | 2022.05.22 |