Windows 10 (since Windows 10 version 1903) and Windows 11 support UTF-8 as the 
default codepage by setting an option in the application manifest.

To enable UTF-8 as the default codepage for JDK executables on Windows 10 
(starting with the May 2019 update) and Windows 11, the following modifications 
can be made to the src/java.base/windows/native/launcher/java.manifest file (or 
the jdk/src/windows/resource/java.manifest in JDK 8):
  ...
  <!-- Indicate JDK is high-dpi aware and enable UTF-8 as the default codepage 
on Windows 10 version 1903 and later. -->
  <asmv3:application>
    <asmv3:windowsSettings 
xmlns:dpi1="http://schemas.microsoft.com/SMI/2005/WindowsSettings";
                           
xmlns:dpi2="http://schemas.microsoft.com/SMI/2016/WindowsSettings";
                           
xmlns:utf8="http://schemas.microsoft.com/SMI/2019/WindowsSettings";>
      <dpi1:dpiAware>true/PM</dpi1:dpiAware>
      <dpi2:dpiAwareness>PerMonitorV2, PerMonitor, system</dpi2:dpiAwareness>
      <utf8:activeCodePage>UTF-8</utf8:activeCodePage>
    </asmv3:windowsSettings>
  </asmv3:application>
  ...

The GetACP() and GetOEMCP() API's will both return 65001 on Windows 10 Version 
1903 or later if <utf8:activeCodePage>UTF-8</utf8:activeCodePage> element is 
added to the executable manifest.

GetLocaleInfo(lcid, LOCALE_IDEFAULTANSICODEPAGE, ret+2, 14) will return 
different results from GetACP() if 
<utf8:activeCodePage>UTF-8</utf8:activeCodePage> is present in the executable 
manifest, and java.nio.charset.Charset.defaultCharset() should return 
StandardCharsets.UTF_8 on Windows platforms if GetACP() returns 65001.

Reply via email to