30 # include <libguess.h>
34 int * arg_bytes_read,
int * arg_bytes_written);
38 char * out = g_strconcat (str,
_(
" (invalid UTF-8)"),
NULL);
40 for (
char * c = out; * c; c ++)
80 if (libguess_validate_utf8(str, strlen(str)))
83 if (g_utf8_validate(str, strlen(str),
NULL))
96 int * arg_bytes_read,
int * arg_bytes_write)
99 int * bytes_read, * bytes_write;
100 int my_bytes_read, my_bytes_write;
102 bytes_read = arg_bytes_read !=
NULL ? arg_bytes_read : &my_bytes_read;
103 bytes_write = arg_bytes_write !=
NULL ? arg_bytes_write : &my_bytes_write;
105 g_return_val_if_fail(str !=
NULL,
NULL);
108 if (libguess_validate_utf8(str, len))
110 if (g_utf8_validate(str, len,
NULL))
116 ret = g_malloc (len + 1);
117 memcpy (ret, str, len);
120 if (arg_bytes_read !=
NULL)
121 * arg_bytes_read = len;
122 if (arg_bytes_write !=
NULL)
123 * arg_bytes_write = len;
133 AUDDBG(
"guess encoding (%s) %s\n", det, str);
134 const char * encoding = libguess_determine_encoding (str, len, det);
135 AUDDBG(
"encoding = %s\n", encoding);
138 gsize read_gsize = 0, written_gsize = 0;
139 ret = g_convert (str, len,
"UTF-8", encoding, & read_gsize, & written_gsize,
NULL);
140 * bytes_read = read_gsize;
141 * bytes_write = written_gsize;
152 char * * split = g_strsplit_set (fallbacks,
" ,:;|/", -1);
154 for (
char * * enc = split; * enc; enc ++)
156 gsize read_gsize = 0, written_gsize = 0;
157 ret = g_convert (str, len,
"UTF-8", * enc, & read_gsize, & written_gsize,
NULL);
158 * bytes_read = read_gsize;
159 * bytes_write = written_gsize;
161 if (len == *bytes_read)
176 gsize read_gsize = 0, written_gsize = 0;
177 ret = g_locale_to_utf8 (str, len, & read_gsize, & written_gsize,
NULL);
178 * bytes_read = read_gsize;
179 * bytes_write = written_gsize;
185 gsize read_gsize = 0, written_gsize = 0;
186 ret = g_convert (str, len,
"UTF-8",
"ISO-8859-1", & read_gsize, & written_gsize,
NULL);
187 * bytes_read = read_gsize;
188 * bytes_write = written_gsize;
193 if (g_utf8_validate(ret, -1,
NULL))
197 g_warning(
"g_utf8_validate() failed for converted string in cd_chardet_to_utf8: '%s'", ret);
209 libguess_determine_encoding(
NULL, -1,
"");
static char * cd_str_to_utf8(const char *str)
static char * cd_chardet_to_utf8(const char *str, int len, int *arg_bytes_read, int *arg_bytes_written)
char * get_string(const char *section, const char *name)
EXPORT void str_set_utf8_impl(char *(*stu_impl)(const char *), char *(*stuf_impl)(const char *, int, int *, int *))
static char * str_to_utf8_fallback(const char *str)