RFR: 8275007: Java fails to start with null charset if LC_ALL is set to certain locales [v2]

Ichiroh Takiguchi itakiguchi at openjdk.java.net
Thu Nov 11 09:43:44 UTC 2021


On Tue, 9 Nov 2021 19:38:01 GMT, Naoto Sato <naoto at openjdk.org> wrote:

>> Please review the subject fix. In light of JEP400, Java runtime can/should start in UTF-8 charset if the underlying native encoding is not supported.
>
> Naoto Sato has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Emit a warning on unsupported jnu encoding

I don't have Oracle Linux...
I tried to find out unsupported locales by using following commands.
I used RHEL7.9.

$ cat CharsetIsSupported.java 
import java.nio.charset.Charset;

public class CharsetIsSupported {
    public static void main(String[] args) throws Exception {
        for(String s : args) {
            if (!Charset.isSupported(s))
                System.out.println(s);
        }
    }
}
$ locale -a | while read LOC; do env LANG=$LOC locale charmap; done | sort -u | xargs ~/jdk-17.0.1/bin/java CharsetIsSupported.java > encoding.lst
$ locale -a | while read LOC; do echo -e "$LOC\t\c"; env LANG=$LOC locale charmap; done | grep -f encoding.lst
cy_GB	ISO-8859-14
cy_GB.iso885914	ISO-8859-14
hy_AM.armscii8	ARMSCII-8
ka_GE	GEORGIAN-PS
ka_GE.georgianps	GEORGIAN-PS
kk_KZ	PT154
kk_KZ.pt154	PT154
lg_UG	ISO-8859-10
lg_UG.iso885910	ISO-8859-10
tg_TJ	KOI8-T
tg_TJ.koi8t	KOI8-T


I tried following command, "sun.jnu.encoding" system property was referred following source code.
We may need to care about these files.

$ find src -type f | xargs grep '"sun.jnu.encoding"'
src/java.base/share/classes/java/lang/System.java:        var jnuEncoding = props.getProperty("sun.jnu.encoding");
src/java.base/share/classes/java/lang/System.java:                    props.getProperty("sun.jnu.encoding"));
src/java.base/share/classes/jdk/internal/util/SystemProps.java:        put(props, "sun.jnu.encoding", raw.propDefault(Raw._sun_jnu_encoding_NDX));
src/java.base/share/classes/sun/launcher/LauncherHelper.java:    private static final String encprop = "sun.jnu.encoding";
src/java.base/share/classes/sun/nio/fs/Util.java:            GetPropertyAction.privilegedGetProperty("sun.jnu.encoding"),
src/java.base/share/native/libjava/jni_util.h:    NO_ENCODING_YET = 0,        /* "sun.jnu.encoding" not yet set */
src/java.desktop/share/classes/sun/font/SunFontManager.java:                    String sysEncoding = System.getProperty("sun.jnu.encoding");

-------------

PR: https://git.openjdk.java.net/jdk/pull/6282


More information about the core-libs-dev mailing list