From 5ef53dcf5cff787adeedbddc81eddfdd637f559a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Mon, 27 Sep 2010 14:36:17 +0100 Subject: [PATCH] tags: try ISO-8859-1 as second fallback in case WINDOWS-1252 is not supported Better safe than sorry. Some embedded systems may use crippled iconv implementations or not support WINDOWS-1252 for other reasons. https://bugzilla.gnome.org/show_bug.cgi?id=630471 --- gst-libs/gst/tag/tags.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/gst-libs/gst/tag/tags.c b/gst-libs/gst/tag/tags.c index ebce1e2..410b3e4 100644 --- a/gst-libs/gst/tag/tags.c +++ b/gst-libs/gst/tag/tags.c @@ -322,7 +322,7 @@ gst_tag_parse_extended_comment (const gchar * ext_comment, gchar ** key, * variables (whose names are specified in the NULL-terminated string array * @env_vars) containing a list of character encodings to try/use. If none * are specified, the current locale will be tried. If that also doesn't work, - * ISO-8859-1 is assumed (which will almost always succeed). + * WINDOWS-1252/ISO-8859-1 is assumed (which will almost always succeed). * * Returns: a newly-allocated string in UTF-8 encoding, or NULL * @@ -442,11 +442,27 @@ gst_tag_freeform_string_to_utf8 (const gchar * data, gint size, } } - /* Try Windows-1252 */ - GST_LOG ("Trying to convert freeform string using Windows-1252 fallback"); - utf8 = g_convert (data, size, "UTF-8", "Windows-1252", &bytes_read, NULL, NULL); - if (utf8 != NULL && bytes_read == size) { - goto beach; + /* Try Windows-1252 (which is a superset of ISO 8859-1 that uses a control + * character range in ISO 8859-1 for more printable characters) */ + { + GError *err = NULL; + + GST_LOG ("Trying to convert freeform string using Windows-1252/ISO-8859-1 " + "fallback"); + utf8 = g_convert (data, size, "UTF-8", "WINDOWS-1252", &bytes_read, NULL, + &err); + if (err != NULL) { + /* fallback in case iconv implementation doesn't support windows-1252 + * for some reason */ + if (err->code == G_CONVERT_ERROR_NO_CONVERSION) { + utf8 = g_convert (data, size, "UTF-8", "ISO-8859-1", &bytes_read, + NULL, NULL); + } + g_error_free (err); + } + + if (utf8 != NULL && bytes_read == size) + goto beach; } g_free (utf8); -- 2.7.4