Windows 10 (since Windows 10 version 1903) and Windows 11 support UTF-8 as the default codepage through an executable manifest option
Naoto Sato
naoto.sato at oracle.com
Mon Oct 4 20:23:47 UTC 2021
Hi John,
Please see the JEP 400, which changes the default charset to UTF-8
across platforms:
https://openjdk.java.net/jeps/400
HTH,
Naoto
On 10/4/21 8:47 AM, John Platts wrote:
> 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.
>
More information about the core-libs-dev
mailing list