summaryrefslogtreecommitdiff
path: root/locale.c
diff options
context:
space:
mode:
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);