diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2002-03-20 00:55:54 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2002-03-20 00:55:54 +0000 |
commit | b310b0538cc1a7948587a9e5ff30683fec2a3ece (patch) | |
tree | f3f8fa0dd8ad9ba1aecae60fa5a8079b3fb69237 /locale.c | |
parent | 563aca73f1f51dd4b10089896b544a6ae41316cb (diff) | |
download | perl-b310b0538cc1a7948587a9e5ff30683fec2a3ece.tar.gz |
If it looks like UTF-8 (either nl_langinfo or locale variables),
think UTF-8, embrace your inner UTF-8, as suggested by Larry.
(And as suggested by Markus Kuhn.)
While we are at it, document also the case of
mixed hash keys as a known potential troublemaker.
(Since it's locale-related, sometimes.)
p4raw-id: //depot/perl@15350
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); |