aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-charset-map.c
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2001-12-18 09:28:27 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2001-12-18 09:28:27 +0800
commitf6408daa103092f18789a719a4123224b259f71f (patch)
tree838b491516e1b3669428136d73019aa9afe5f2c3 /camel/camel-charset-map.c
parent13299ab7e073cf4d412cec019e4240a7634c1cf5 (diff)
downloadgsoc2013-evolution-f6408daa103092f18789a719a4123224b259f71f.tar.gz
gsoc2013-evolution-f6408daa103092f18789a719a4123224b259f71f.tar.zst
gsoc2013-evolution-f6408daa103092f18789a719a4123224b259f71f.zip
New function to map ISO charsets to the Windows charsets.
2001-12-17 Jeffrey Stedfast <fejj@ximian.com> * camel-charset-map.c (camel_charset_iso_to_windows): New function to map ISO charsets to the Windows charsets. * camel-mime-part-utils.c (broken_windows_charset): Detect Windows charsets. (simple_data_wrapper_construct_from_parser): Simplify a tad and also check for iso-8859-* charsets that are really Windows charsets. Fixes bug #12631. svn path=/trunk/; revision=15144
Diffstat (limited to 'camel/camel-charset-map.c')
-rw-r--r--camel/camel-charset-map.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/camel/camel-charset-map.c b/camel/camel-charset-map.c
index 17962d74be..2416dd2504 100644
--- a/camel/camel-charset-map.c
+++ b/camel/camel-charset-map.c
@@ -292,5 +292,60 @@ camel_charset_best (const char *in, int len)
return camel_charset_best_name (&charset);
}
+
+/**
+ * camel_charset_iso_to_windows:
+ * @isocharset: an ISO charset
+ *
+ * Returns the equivalent Windows charset.
+ **/
+const char *
+camel_charset_iso_to_windows (const char *isocharset)
+{
+ /* According to http://czyborra.com/charsets/codepages.html,
+ * the charset mapping is as follows:
+ *
+ * iso-8859-1 maps to windows-cp1252
+ * iso-8859-2 maps to windows-cp1250
+ * iso-8859-3 maps to windows-cp????
+ * iso-8859-4 maps to windows-cp????
+ * iso-8859-5 maps to windows-cp1251
+ * iso-8859-6 maps to windows-cp1256
+ * iso-8859-7 maps to windows-cp1253
+ * iso-8859-8 maps to windows-cp1255
+ * iso-8859-9 maps to windows-cp1254
+ * iso-8859-10 maps to windows-cp????
+ * iso-8859-11 maps to windows-cp????
+ * iso-8859-12 maps to windows-cp????
+ * iso-8859-13 maps to windows-cp1257
+ *
+ * Assumptions:
+ * - I'm going to assume that since iso-8859-4 and
+ * iso-8859-13 are Baltic that it also maps to
+ * windows-cp1257.
+ */
+
+ if (!strcasecmp (isocharset, "iso-8859-1"))
+ return "windows-cp1252";
+ else if (!strcasecmp (isocharset, "iso-8859-2"))
+ return "windows-cp1250";
+ else if (!strcasecmp (isocharset, "iso-8859-4"))
+ return "windows-cp1257";
+ else if (!strcasecmp (isocharset, "iso-8859-5"))
+ return "windows-cp1251";
+ else if (!strcasecmp (isocharset, "iso-8859-6"))
+ return "windows-cp1256";
+ else if (!strcasecmp (isocharset, "iso-8859-7"))
+ return "windows-cp1253";
+ else if (!strcasecmp (isocharset, "iso-8859-8"))
+ return "windows-cp1255";
+ else if (!strcasecmp (isocharset, "iso-8859-9"))
+ return "windows-cp1254";
+ else if (!strcasecmp (isocharset, "iso-8859-13"))
+ return "windows-cp1257";
+
+ return isocharset;
+}
+
#endif /* !BUILD_MAP */