UTF-8 코드 페이지 사용Use the UTF-8 code page

UTF-8 앱과 기타 * nix 기반 플랫폼 (Unix, Linux 및 변형) 간의 최적 호환성을 위해 utf-8 문자 인코딩을 사용 하 고 지역화 버그를 최소화 하 고 테스트 오버 헤드를 줄입니다.Use UTF-8 character encoding for optimal compatibility between web apps and other *nix-based platforms (Unix, Linux, and variants), minimize localization bugs, and reduce testing overhead.

U t f-8은 국제화를 위한 유니버설 코드 페이지 이며 전체 유니코드 문자 집합을 인코딩할 수 있습니다.UTF-8 is the universal code page for internationalization and is able to encode the entire Unicode character set. 웹에서 pervasively 사용 되며 * nix 기반 플랫폼의 기본값입니다.It is used pervasively on the web, and is the default for *nix-based platforms.

참고

인코딩된 문자는 1 바이트에서 4 바이트 사이를 사용 합니다.An encoded character takes between 1 and 4 bytes. UTF-8 인코딩은 최대 6 바이트의 긴 바이트 시퀀스를 지원 하지만 유니코드 6.0의 가장 큰 코드 포인트 (U + 10FFFF)는 4 바이트만 사용 합니다.UTF-8 encoding supports longer byte sequences, up to 6 bytes, but the biggest code point of Unicode 6.0 (U+10FFFF) only takes 4 bytes.

-A와-W Api 비교-A vs. -W APIs

Win32 Api는 종종-A 및-W 변형을 모두 지원 합니다.Win32 APIs often support both -A and -W variants.

-변형은 시스템 및 지원에 구성 된 ANSI 코드 페이지를 인식 char* 하는 반면-W 변형은 u t f-16 및 지원으로 작동 WCHAR 합니다.-A variants recognize the ANSI code page configured on the system and support char*, while -W variants operate in UTF-16 and support WCHAR.

최근 까지는 Windows에서 "유니코드"-W 변형 오버 Api를 강조 했습니다.Until recently, Windows has emphasized "Unicode" -W variants over -A APIs. 그러나 최근 릴리스는 응용 프로그램에 UTF-8 지원을 도입 하기 위한 수단으로 ANSI 코드 페이지 및-A Api를 사용 했습니다.However, recent releases have used the ANSI code page and -A APIs as a means to introduce UTF-8 support to apps. ANSI 코드 페이지가 u t f-8로 구성 된 경우-Api는 u t f-8로 작동 합니다.If the ANSI code page is configured for UTF-8, -A APIs operate in UTF-8. 이 모델은 코드를 변경 하지 않고 Api로 빌드된 기존 코드를 지원할 수 있는 이점을 제공 합니다.This model has the benefit of supporting existing code built with -A APIs without any code changes.

프로세스 코드 페이지를 u t f-8로 설정Set a process code page to UTF-8

Windows 버전 1903 (2019 업데이트 될 수 있음)에서 패키지 된 앱에 대 한 appxmanifest.xml의 ActiveCodePage 속성 또는 패키지 되지 않은 앱에 대 한 fusion 매니페스트를 사용 하 여 프로세스가 프로세스 코드 페이지로 u t f-8을 강제로 사용 하도록 할 수 있습니다.As of Windows Version 1903 (May 2019 Update), you can use the ActiveCodePage property in the appxmanifest for packaged apps, or the fusion manifest for unpackaged apps, to force a process to use UTF-8 as the process code page.

이 속성을 선언 하 고 이전 Windows 빌드에서 대상/실행 하지만 기존 코드 페이지 검색 및 변환을 일반적인 방법으로 처리 해야 합니다.You can declare this property and target/run on earlier Windows builds, but you must handle legacy code page detection and conversion as usual. Windows 버전 1903의 최소 대상 버전을 사용 하는 경우 프로세스 코드 페이지는 항상 u t f-8 이므로 레거시 코드 페이지를 검색 하 고 변환을 피할 수 있습니다.With a minimum target version of Windows Version 1903, the process code page will always be UTF-8 so legacy code page detection and conversion can be avoided.

Examples

패키지 된 앱에 대 한 Appx 매니페스트:Appx manifest for a packaged app:

<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
         ...
         xmlns:uap7="http://schemas.microsoft.com/appx/manifest/uap/windows10/7"
         xmlns:uap8="http://schemas.microsoft.com/appx/manifest/uap/windows10/8"
         ...
         IgnorableNamespaces="... uap7 uap8 ...">

  <Applications>
    <Application ...>
      <uap7:Properties>
        <uap8:ActiveCodePage>UTF-8</uap8:ActiveCodePage>
      </uap7:Properties>
    </Application>
  </Applications>
</Package>

패키지 되지 않은 Win32 앱에 대 한 Fusion 매니페스트:Fusion manifest for an unpackaged Win32 app:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity type="win32" name="..." version="6.0.0.0"/>
  <application>
    <windowsSettings>
      <activeCodePage xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings">UTF-8</activeCodePage>
    </windowsSettings>
  </application>
</assembly>

참고

를 사용 하 여 명령줄에서 기존 실행 파일에 매니페스트를 추가 합니다. mt.exe -manifest <MANIFEST> -outputresource:<EXE>;#1Add a manifest to an existing executable from the command line with mt.exe -manifest <MANIFEST> -outputresource:<EXE>;#1

코드 페이지 변환Code page conversion

Windows가 u t f-16 ()에서 기본적으로 작동할 때 WCHAR utf-8 데이터를 u t f-16으로 변환 하거나 그 반대로 변환 하 여 Windows api와 상호 운용 해야 할 수 있습니다.As Windows operates natively in UTF-16 (WCHAR), you might need to convert UTF-8 data to UTF-16 (or vice versa) to interoperate with Windows APIs.

MultiByteToWideCharWideCharToMultiByte 를 사용 하면 u t f-8과 utf-16 ( WCHAR ) (및 다른 코드 페이지) 사이를 변환할 수 있습니다.MultiByteToWideChar and WideCharToMultiByte let you convert between UTF-8 and UTF-16 (WCHAR) (and other code pages). 이 기능은 레거시 Win32 API만 이해할 수 있는 경우에 특히 유용 WCHAR 합니다.This is particularly useful when a legacy Win32 API might only understand WCHAR. 이러한 함수를 사용 하면 u t f-8 입력을로 변환 하 여 WCHAR 를 a W API에 전달 하 고 필요한 경우 결과를 다시 변환할 수 있습니다.These functions allow you to convert UTF-8 input to WCHAR to pass into a -W API and then convert any results back if necessary. 를로 설정 하 여 이러한 함수를 사용 하는 경우 CodePage CP_UTF8 또는 중 dwFlags 하나를 사용 0 MB_ERR_INVALID_CHARS 합니다. 그렇지 않으면이 ERROR_INVALID_FLAGS 발생 합니다.When using these functions with CodePage set to CP_UTF8, use dwFlags of either 0 or MB_ERR_INVALID_CHARS, otherwise an ERROR_INVALID_FLAGS occurs.

참고

CP_ACP``CP_UTF8Windows 버전 1903 (2019 업데이트) 이상에서 실행 중이 고 위에서 설명한 ActiveCodePage 속성이 u t f-8로 설정 된 경우에만 해당 합니다.CP_ACP equates to CP_UTF8 only if running on Windows Version 1903 (May 2019 Update) or above and the ActiveCodePage property described above is set to UTF-8. 그렇지 않으면 레거시 시스템 코드 페이지를 따릅니다.Otherwise, it honors the legacy system code page. 명시적으로를 사용 하는 것이 좋습니다 CP_UTF8 .We recommend using CP_UTF8 explicitly.