May 31st, 2022

The activeCodePage manifest element can be used for more than just setting UTF-8 as the active code page

Windows 10 Version 1903 introduced a new manifest property called activeCodePage, which you can use to set the process’s code page to UTF-8.

Starting in Windows Server 2022 (and Windows 11),¹ you can also use this property to pick non-UTF-8 code pages in unpackaged app manifests.²

AppLocale finally grows up!

If you specify an activeCodePage of Legacy, then you’re saying that your application actively hates UTF-8. It will be given the system default locale, provided a system default local exists and it isn’t UTF-8. In those exceptional cases, you get code page 1252 as a fallback.

You can also specify a locale name such as en-US or ja-JP, and the application gets the code page corresponding to that locale. If the locale is not recognized by the system, then you get UTF-8 as a fallback.

This trick is most useful for application compatibility purposes: If you have some legacy application that assumes a specific locale, you can deploy a manifest next to the application that says “I don’t care what locale the system is using. Give this application the locale it wants.”

Here’s a summary table, since I know people love summary tables.

activeCodePage UTF-8 specific locale Legacy
Case-sensitive? Yes No Yes
Preferred result UTF-8 That locale,
if available
System locale,
if available,
and not UTF-8
Fallback result   UTF-8 1252
Packaged app Supported Not supported Not supported
Unpackaged app Supported Supported Supported

¹ Specifically, build 20348 and higher, so that also includes HoloLens 2, also known as Windows Holographic, version 21H1.

² The code name for unpackaged app manifests³ was “fusion”, so if you read the documentation, you will frequently see them referred to as “fusion manifests”.

³ They weren’t called “unpackaged app manifests” at the time, because when the fusion project was being written, we didn’t have packaged apps at all. They were just called “manifests”. Later, when manifests were introduced for packaged apps, the retronym “unpackaged app manifests” was invented to describe fusion manifests.

Author

Raymond has been involved in the evolution of Windows for more than 30 years. In 2003, he began a Web site known as The Old New Thing which has grown in popularity far beyond his wildest imagination, a development which still gives him the heebie-jeebies. The Web site spawned a book, coincidentally also titled The Old New Thing (Addison Wesley 2007). He occasionally appears on the Windows Dev Docs Twitter account to tell stories which convey no useful information.

4 comments

Discussion is closed. Login to edit/delete existing comments.

  • Jerry Richards

    Kind of close to codepages. My problem and question deal with the resource compiler. Specifically, trying to reference the STRINGTABLE in menu resources:

    STRINGTABLE
    BEGIN
    IDS_FILE_MENU_POPUP L"&File"
    END

    IDM_APP_MENU MENU
    BEGIN
    POPUP IDS_FILE_MENU_POPUP
    END

    I am going to write a preprocessor for...

    Read more
  • GL

    I believe application manifests exist as early as Windows XP, when you could use them to force themed common controls for (then-)legacy applications. It’s funny that they get a new name after (I suppose) 10 years when Windows 8 came out.

    • GFYS V

      I had a dream about something on the phone was on the 2nd 11-2 Am my z drive flipped? MapQuest destination? Assistance

  • Joshua Hudson

    Four more years until I’m allowed to manifest for UTF-8 locale at work. (Windows Server 2016 EoL)