78
78
eog_util_make_valid_utf8 (const gchar *str)
82
if (g_utf8_validate (str, -1, NULL)) {
83
utf_str = g_strdup (str);
85
utf_str = g_locale_to_utf8 (str, -1, NULL, NULL, NULL);
81
const char *remainder, *invalid;
82
int remaining_bytes, valid_bytes;
86
remaining_bytes = strlen (str);
88
while (remaining_bytes != 0) {
89
if (g_utf8_validate (remainder, remaining_bytes, &invalid)) {
93
valid_bytes = invalid - remainder;
96
string = g_string_sized_new (remaining_bytes);
99
g_string_append_len (string, remainder, valid_bytes);
100
g_string_append_c (string, '?');
102
remaining_bytes -= valid_bytes + 1;
103
remainder = invalid + 1;
106
if (string == NULL) {
107
return g_strdup (str);
110
g_string_append (string, remainder);
111
/* FIXME: Can't add this string for 2.20 anymore. Uncomment
112
* this after stable branching. */
113
/* g_string_append (string, _(" (invalid Unicode)")); */
115
g_assert (g_utf8_validate (string->str, -1, NULL));
117
return g_string_free (string, FALSE);