diff options
Diffstat (limited to 'locale.c')
-rw-r--r-- | locale.c | 39 |
1 files changed, 39 insertions, 0 deletions
@@ -25,6 +25,10 @@ # include <locale.h> #endif +#ifdef I_LANGINFO +# include <langinfo.h> +#endif + /* * Standardize the locale name from a string returned by 'setlocale'. * @@ -462,10 +466,45 @@ Perl_init_i18nl10n(pTHX_ int printwarn) #ifdef USE_LOCALE_NUMERIC new_numeric(curnum); #endif /* USE_LOCALE_NUMERIC */ + } #endif /* USE_LOCALE */ + { + bool wantutf8 = FALSE; + char *codeset = NULL; +#if defined(HAS_NL_LANGINFO) && defined(CODESET) + codeset = nl_langinfo(CODESET); +#endif + if (codeset && + (ibcmp(codeset, "UTF-8", 5) == 0 || + ibcmp(codeset, "UTF8", 4) == 0)) + wantutf8 = TRUE; +#ifdef __GLIBC__ + if (!wantutf8 && language && + (ibcmp(language, "UTF-8", 5) == 0 || + ibcmp(language, "UTF8", 4) == 0)) + wantutf8 = TRUE; +#endif + if (!wantutf8 && lc_all && + (ibcmp(lc_all, "UTF-8", 5) == 0 || + ibcmp(lc_all, "UTF8", 4) == 0)) + wantutf8 = TRUE; +#ifdef USE_LOCALE_CTYPE + if (!wantutf8 && curctype && + (ibcmp(curctype, "UTF-8", 5) == 0 || + ibcmp(curctype, "UTF8", 4) == 0)) + wantutf8 = TRUE; +#endif + if (!wantutf8 && lang && + (ibcmp(lang, "UTF-8", 5) == 0 || + ibcmp(lang, "UTF8", 4) == 0)) + wantutf8 = TRUE; + if (wantutf8) + PL_wantutf8 = TRUE; + } + #ifdef USE_LOCALE_CTYPE if (curctype != NULL) Safefree(curctype); |