유니코드 프로그래밍 요약

유니코드에 대한 MFC 및 C 런타임 지원을 활용하려면 다음을 수행해야 합니다.

  • 를 정의합니다 _UNICODE.

    프로그램을 빌드하기 전에 기호 _UNICODE 를 정의합니다.

  • 진입점을 지정합니다.

    프로젝트의 속성 페이지 대화 상자에서 링커 폴더의 고급 페이지에서 진입점 기호를 wWinMainCRTStartup로 설정합니다.

  • 이식 가능한 런타임 함수 및 형식을 사용합니다.

    유니코드 문자열 처리에 적절한 C 런타임 함수를 사용합니다. 함수 패밀리를 wcs 사용할 수 있지만 완전히 이식 가능한(국제적으로 사용) _TCHAR 매크로를 사용하는 것이 좋습니다. 이러한 매크로는 모두 접두사로 _tcs갖습니다. 함수 패밀리를 대신 str 합니다. 이러한 함수는 런타임 라이브러리 참조의 국제화 섹션에 자세히 설명되어 있습니다. 자세한 내용은 tchar.h의 일반 텍스트 매핑을 참조하세요.

    유니코드 지원에 설명된 관련 이식 가능한 데이터 형식 및 사용 _TCHAR

  • 리터럴 문자열을 올바르게 처리합니다.

    Visual C++ 컴파일러는 다음과 같이 코딩된 리터럴 문자열을 해석합니다.

    L"this is a literal string"
    

    유니코드 문자 문자열을 의미합니다. 리터럴 문자에 대해 동일한 접두사를 사용할 수 있습니다. 매크로를 _T 사용하여 리터럴 문자열을 일반적으로 코딩하므로 유니코드 아래에 유니코드 문자열로 컴파일하거나 유니코드 없이 ANSI 문자열(MBCS 포함)로 컴파일합니다. 예를 들어 다음 식을 사용하는 대신

    pWnd->SetWindowText( "Hello" );
    

    다음을 사용합니다.

    pWnd->SetWindowText( _T("Hello") );
    

    _UNICODE 정의된 _T 경우 리터럴 문자열을 L 접두사 형식으로 변환하고, _T 그렇지 않으면 L 접두사 없이 문자열을 변환합니다.

    _T 매크로는 매크로와 _TEXT 동일합니다.

  • 함수에 문자열 길이를 전달하는 데 주의해야 합니다.

    일부 함수는 문자열의 문자 수를 원합니다. 다른 사용자는 바이트 수를 원합니다. 예를 들어 정의된 경우 _UNICODE 개체에 대한 CArchive 다음 호출이 작동하지 않습니다(stra).CString

    archive.Write( str, str.GetLength( ) );    // invalid
    

    유니코드 애플리케이션에서 길이는 문자 수를 제공하지만 각 문자는 너비가 2바이트이므로 올바른 바이트 수는 아닙니다. 대신 다음을 사용해야 합니다.

    archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) );    // valid
    

    은 쓸 올바른 바이트 수를 지정합니다.

    그러나 바이트 지향이 아닌 문자 지향 MFC 멤버 함수는 다음과 같은 추가 코딩 없이 작동합니다.

    pDC->TextOut( str, str.GetLength( ) );
    

    CDC::TextOut 는 바이트가 아닌 여러 문자를 사용합니다.

  • fopen_s _wfopen_s 사용하여 유니코드 파일을 엽니다.

요약하자면, MFC와 런타임 라이브러리는 유니코드 프로그래밍에 대해 다음과 같은 지원을 제공합니다.

  • 데이터베이스 클래스 멤버 함수를 제외하고 모든 MFC 함수는 유니코드 사용(포함 CString)입니다. CString 에서는 유니코드/ANSI 변환 함수도 제공합니다.

  • 런타임 라이브러리는 모든 문자열 처리 함수의 유니코드 버전을 제공합니다. (런타임 라이브러리는 유니코드 또는 MBCS에 적합한 이식 가능한 버전도 제공합니다. 매크로입니다 _tcs .)

  • tchar.h는 리터럴 문자열과 _T 문자를 번역하기 위한 이식 가능한 데이터 형식과 매크로를 제공합니다. 자세한 내용은 tchar.h의 일반 텍스트 매핑을 참조하세요.

  • 런타임 라이브러리는 와이드 문자 버전의 main. 애플리케이션을 유니코드 인식으로 만드는 데 사용합니다 wmain .

참고 항목

유니코드 지원