* man/mhbuild.man: wrapped one appearance of "Content-Disposition"
[mmh] / sbr / check_charset.c
index 5d98774..d6b8ca3 100644 (file)
  */
 
 #include <h/mh.h>
+#ifdef HAVE_LANGINFO_H
+# include <langinfo.h>
+#endif
+
+
+/*
+ * Get the current character set
+ */
+char *
+get_charset ()
+{
+    char *charset = getenv ("MM_CHARSET");
+#if defined(HAVE_NL_LANGINFO) && defined(CODESET)
+    if (!charset)
+       charset = norm_charmap(nl_langinfo (CODESET));
+#endif
+    return charset;
+}
+
 
 /*
  * Check if we can display a given character set natively.
@@ -28,12 +47,13 @@ check_charset (char *str, int len)
 
     /* Cache the name of our default character set */
     if (!mm_charset) {
-       if (!(mm_charset = getenv ("MM_CHARSET")))
+       if (!(mm_charset = get_charset ()))
            mm_charset = "US-ASCII";
        mm_len = strlen (mm_charset);
 
-       /* US-ASCII is a subset of the ISO-8859-X character sets */
-       if (!strncasecmp("ISO-8859-", mm_charset, 9)) {
+       /* US-ASCII is a subset of the ISO-8859-X and UTF-8 character sets */
+       if (!strncasecmp("ISO-8859-", mm_charset, 9) ||
+               !strcasecmp("UTF-8", mm_charset)) {
            alt_charset = "US-ASCII";
            alt_len = strlen (alt_charset);
        }
@@ -62,7 +82,7 @@ write_charset_8bit (void)
      * Cache the name of the character set to
      * use for 8bit text.
      */
-    if (!mm_charset && !(mm_charset = getenv ("MM_CHARSET")))
+    if (!mm_charset && !(mm_charset = get_charset ()))
            mm_charset = "x-unknown";
 
     return mm_charset;