유니코드 지원

유니코드 표준은 표시 및 저장 목적으로 국가별 텍스트를 인코딩하기 위해 설계된 표준화된 문자 코드입니다. 여기에서는 플랫폼, 언어 또는 프로그램에 상관없이 각 개별 문자를 표시하는 데 고유한 16비트 또는 32비트 값을 사용합니다. 유니코드를 사용하면 다양한 플랫폼, 언어, 국가 또는 지역에서 사용할 수 있는 소프트웨어 제품을 개발할 수 있습니다. 또한 유니코드를 사용하면 여러 서로 다른 시스템에서 데이터를 전송할 수 있습니다.

컴파일러 및 런타임에 사용 가능한 두 가지 서로 다른 양식의 유니코드 지원이 있습니다. 이 절에서는 두 가지 양식의 유니코드 지원과 해당 지원을 사용할 때 몇 가지 피처 및 고려사항을 설명합니다. 유니코드에 대한 추가 정보를 보려면 유니코드 홈 페이지(www.unicode.org)를 참조하십시오.

유니코드 지원의 첫 번째 유형은 UCS-2 지원입니다. LOCALETYPE(*LOCALEUCS2) 옵션이 컴파일 명령에 지정된 경우 컴파일러 및 런타임에서는 와이드 문자(즉, wchar_t 유형의 문자) 및 2바이트 유니코드 문자를 나타내는 와이드 문자 스트링(즉, wchar_t 유형의 스트링)을 사용합니다. 반자(Narrow)(비와이드) 및 반자 문자 스트링은 UCS-2 지원을 사용할 수 없는 경우와 같이 EBCDIC 문자를 나타냅니다. 유니코드 문자는 CCSID 13488에서 코드점을 표시합니다.

유니코드 지원의 두 번째 유형은 UTF-8 또는 UTF-32 지원(UTF 지원이라고도 함)입니다. LOCALETYPE(*LOCALEUTF) 옵션이 컴파일 명령에 지정된 경우 컴파일러 및 런타임은 4바이트 유니코드 문자를 나타내는 와이드 문자 및 와이드 문자 스트링을 사용합니다. 각 4바이트 문자는 단일 UTF-32 문자를 나타냅니다. 반자 및 반자 스트링은 UTF-8 문자를 나타냅니다. 각 UTF-8 문자의 크기는 1바이트에서 4바이트 사이입니다. 대부분의 정상 문자는 크기가 1바이트이고 실제로 모든 7비트 ASCII 문자는 UTF-8에 직접 맵핑되고 크기는 1바이트입니다. UTF-8 문자는 코드점을 CCSID 1208로 표현합니다.

UTF 지원이 사용 가능하면 와이드 문자가 UTF-32 유니코드가 되고 반자(narrow characters)도 UTF-8 유니코드가 됩니다. 예로, 다음 HelloWorld 프로그램을 고려합니다.
#include <stdio.h>

int main() {    
   printf("Hello World\n");    
   return 0;
}
이 프로그램이 UTF 지원으로 컴파일된 경우 문자 스트링은 EBCDIC 문자가 아닌 UTF-8 문자로 프로그램에 저장됩니다. printf() 함수는 이 사실을 알고 있으며 UTF-8 문자를 분석하고 예상대로 출력을 생성할 수 있습니다. 그러나 이 프로그램이 UTF-8 문자를 처리하는 방법을 알지 못하는 일부 다른 사용자 제공 함수를 호출한 경우 다른 함수는 올바르지 않은 결과나 작동이 나타날 수 있습니다.