C & C++

[C언어] 한글 입력/출력 및 유니코드 값 확인 방법(wchar_t 활용)

jimmy_AI 2022. 6. 12. 17:00
반응형

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"가 나타난 것을 확인할 수 있습니다.