summaryrefslogtreecommitdiff
path: root/locale.c
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2002-03-20 00:55:54 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2002-03-20 00:55:54 +0000
commitb310b0538cc1a7948587a9e5ff30683fec2a3ece (patch)
treef3f8fa0dd8ad9ba1aecae60fa5a8079b3fb69237 /locale.c
parent563aca73f1f51dd4b10089896b544a6ae41316cb (diff)
downloadperl-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.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/locale.c b/locale.c
index 22e903037a..2c84ab5cb2 100644
--- a/locale.c
+++ b/locale.c
@@ -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);