If it looks like UTF-8 (either nl_langinfo or locale variables),
[p5sagit/p5-mst-13.2.git] / locale.c
index 22e9030..2c84ab5 100644 (file)
--- a/locale.c
+++ b/locale.c
 #  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);