다음을 통해 공유


국가별 사용

대부분의 전통적인 C 코드와 C++ 코드에서는 문자 및 문자열 조작이 국가별 응용 프로그램에서 제대로 작동하지 않는다고 가정합니다. MFC와 런타임 라이브러리 모두 유니코드나 MBCS를 지원하지만 여전히 사용자가 수행해야 할 작업이 있습니다. 이 단원에서는 사용자를 안내하기 위해 Visual C++에서 "국가별 사용"의 의미를 설명합니다.

  • 유니코드와 MBCS는 MFC 함수 매개 변수 목록과 반환 형식에 있는 이식 가능한 데이터 형식을 통해 활성화됩니다. 이러한 데이터 형식은 빌드가 _UNICODE 기호를 정의하는지 _MBCS 기호(DBCS를 의미)를 정의하는지에 따라 적절하게 조건부로 정의됩니다. 빌드가 두 기호 중 어떤 기호를 정의하는지에 따라 MFC 라이브러리의 여러 변형이 응용 프로그램에 자동으로 링크됩니다.

  • 클래스 라이브러리 코드는 이식 가능한 런타임 함수와 기타 방법을 사용하여 유니코드나 MBCS 동작이 제대로 수행되도록 합니다.

  • 그러나 사용자도 특정 종류의 국가별 작업을 처리하는 코드를 작성해야 합니다.

    • 두 환경 중 하나에서 이식 가능한 MFC로 만드는 데 사용하는 동일한 이식 가능 런타임 함수를 사용합니다.

    • 두 환경 중 하나에서 _T 매크로를 사용하여 리터럴 문자열과 문자를 이식 가능하도록 만듭니다. 자세한 내용은 Tchar.h의 제네릭 텍스트 매핑을 참조하십시오.

    • MBCS에서 문자열을 구문 분석할 때에는 주의해야 합니다. 유니코드에서는 주의하지 않아도 됩니다. 자세한 내용은 MBCS 프로그래밍 팁을 참조하십시오.

    • 응용 프로그램에서 ANSI(8비트) 문자와 유니코드(16비트) 문자를 함께 사용할 경우 주의해야 합니다. 프로그램의 어떤 부분에 ANSI 문자를 사용하고 다른 부분에 유니코드 문자를 사용할 수 있지만 동일한 문자열에서 두 가지를 함께 사용할 수는 없습니다.

    • 응용 프로그램에서 문자열을 하드 코딩하지 마십시오. 대신 문자열을 응용 프로그램의 .rc 파일에 추가하여 STRINGTABLE 리소스로 만듭니다. 그러면 소스 코드를 변경하거나 다시 컴파일하지 않고도 응용 프로그램을 지역화할 수 있습니다. STRINGTABLE 리소스에 대한 자세한 내용은 문자열 편집기를 참조하십시오.

참고

유럽 및 MBCS 문자 집합에는 악센트 부호가 있는 글자와 같이 문자 코드가 0x80보다 큰 문자가 있습니다. 대부분의 코드가 부호 있는 문자를 사용하기 때문에 0x80보다 큰 문자는 int로 변환될 때 부호가 확장됩니다. 부호가 확장된 문자는 음수로 처리되어 배열을 벗어나 인덱싱되므로 배열 인덱싱에 문제를 일으킵니다. MBCS를 사용하는 언어(예: 한국어)도 문제의 소지가 있습니다. 문자가 1바이트나 2바이트로 구성될 수 있기 때문에 항상 두 바이트를 동시에 처리해야 합니다.

참고 항목

개념

유니코드 및 MBCS

국제화 전략