31 # include <libguess.h>
35 int * arg_bytes_read,
int * arg_bytes_written);
39 char * out = g_strconcat (str,
_(
" (invalid UTF-8)"),
NULL);
41 for (
char * c = out; * c; c ++)
81 if (libguess_validate_utf8(str, strlen(str)))
84 if (g_utf8_validate(str, strlen(str),
NULL))
97 int * arg_bytes_read,
int * arg_bytes_write)
100 int * bytes_read, * bytes_write;
101 int my_bytes_read, my_bytes_write;
103 bytes_read = arg_bytes_read !=
NULL ? arg_bytes_read : &my_bytes_read;
104 bytes_write = arg_bytes_write !=
NULL ? arg_bytes_write : &my_bytes_write;
106 g_return_val_if_fail(str !=
NULL,
NULL);
109 if (libguess_validate_utf8(str, len))
111 if (g_utf8_validate(str, len,
NULL))
117 ret = g_malloc (len + 1);
118 memcpy (ret, str, len);
121 if (arg_bytes_read !=
NULL)
122 * arg_bytes_read = len;
123 if (arg_bytes_write !=
NULL)
124 * arg_bytes_write = len;
134 AUDDBG(
"guess encoding (%s) %s\n", det, str);
135 const char * encoding = libguess_determine_encoding (str, len, det);
136 AUDDBG(
"encoding = %s\n", encoding);
139 gsize read_gsize = 0, written_gsize = 0;
140 ret = g_convert (str, len,
"UTF-8", encoding, & read_gsize, & written_gsize,
NULL);
141 * bytes_read = read_gsize;
142 * bytes_write = written_gsize;
153 char * * split = g_strsplit_set (fallbacks,
" ,:;|/", -1);
155 for (
char * * enc = split; * enc; enc ++)
157 gsize read_gsize = 0, written_gsize = 0;
158 ret = g_convert (str, len,
"UTF-8", * enc, & read_gsize, & written_gsize,
NULL);
159 * bytes_read = read_gsize;
160 * bytes_write = written_gsize;
162 if (len == *bytes_read)
177 gsize read_gsize = 0, written_gsize = 0;
178 ret = g_locale_to_utf8 (str, len, & read_gsize, & written_gsize,
NULL);
179 * bytes_read = read_gsize;
180 * bytes_write = written_gsize;
186 gsize read_gsize = 0, written_gsize = 0;
187 ret = g_convert (str, len,
"UTF-8",
"ISO-8859-1", & read_gsize, & written_gsize,
NULL);
188 * bytes_read = read_gsize;
189 * bytes_write = written_gsize;
194 if (g_utf8_validate(ret, -1,
NULL))
198 g_warning(
"g_utf8_validate() failed for converted string in cd_chardet_to_utf8: '%s'", ret);
210 libguess_determine_encoding(
NULL, -1,
"");