When debugging test failures in libisds on Gentoo with musl , I found that nl_langinfo(CODESET) does not match current locale. A reproducer: #include #include #include int main(void) { char *old_locale = setlocale(LC_ALL, "cs_CZ.ISO8859-2"); if (old_locale == NULL) { perror("setlocale() set failed"); return 1; } old_locale = setlocale(LC_ALL, NULL); if (old_locale == NULL) { perror("setlocale() query failed"); return 1; } printf("Current LC_ALL=%s\n", old_locale); printf("CODESET=%s\n", nl_langinfo(CODESET)); return 0; } # gcc test.c && ./a.out Current LC_ALL=cs_CZ.ISO8859-2 CODESET=UTF-8 While on glibc: $ gcc test.c && ./a.out Current LC_ALL=cs_CZ.ISO8859-2 CODESET=ISO-8859-2 I can see that for cs_CZ.UTF8 locale, it nl_langinfo() correctly reports UTF-8, as well for C reports ASCII. However, for any other character set it always returns UTF-8. I found a notice that musl does not implements non-UTF-8 locales. If that is true, then selocale() for "cs_CZ.ISO8859-2" should fail, instead of accepting the locale. I observe this behavior with musl-1.2.5. -- Petr