tag: id3v2: If strings in text fields are marked ISO8859-1, but contain valid UTF...
authorJan Schmidt <thaytan@mad.scientist.com>
Tue, 22 Aug 2006 13:53:34 +0000 (13:53 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Sun, 14 Aug 2011 23:10:30 +0000 (00:10 +0100)
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (parse_text_identification_frame),
(parse_insert_string_field):
If strings in text fields are marked ISO8859-1, but contain
valid UTF-8 already, then handle them as UTF-8 and ignore
the encoding. (#351794)

gst-libs/gst/tag/id3v2frames.c

index 4e98a5e..96fa88e 100644 (file)
@@ -273,12 +273,12 @@ parse_text_identification_frame (ID3TagsWorking * work)
       work->parse_size - 1, &fields);
   if (fields) {
     if (fields->len > 0) {
-      GST_LOG ("Read %d fields from Text ID frame of size %d. First is '%s'",
-          fields->len, work->parse_size - 1,
+      GST_LOG ("Read %d fields from Text ID frame of size %d with encoding %d"
+          ". First is '%s'", fields->len, work->parse_size - 1, encoding,
           g_array_index (fields, gchar *, 0));
     } else {
-      GST_LOG ("Read %d fields from Text ID frame of size %d", fields->len,
-          work->parse_size - 1);
+      GST_LOG ("Read 0 fields from Text ID frame of size %d with encoding %d",
+          work->parse_size - 1, encoding);
     }
   }
 
@@ -911,8 +911,11 @@ parse_insert_string_field (guint8 encoding, gchar * data, gint data_size,
 
       break;
     case ID3V2_ENCODING_ISO8859:
-      field = g_convert (data, data_size, "UTF-8", "ISO-8859-1",
-          NULL, NULL, NULL);
+      if (g_utf8_validate (data, data_size, NULL))
+        field = g_strndup (data, data_size);
+      else
+        field = g_convert (data, data_size, "UTF-8", "ISO-8859-1",
+            NULL, NULL, NULL);
       break;
     default:
       field = g_strndup (data, data_size);