Display character which caused a failed encoding conversion when saving a file.

git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@2071 ea778897-0a13-0410-b9d1-a72fbfd435f5
This commit is contained in:
Enrico Tröger 2007-11-25 13:48:22 +00:00
parent 8cb52f7f3b
commit bb974f08f2
2 changed files with 20 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2007-11-25 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* src/document.c: Display character which caused a failed encoding
conversion when saving a file.
2007-11-23 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> 2007-11-23 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* src/symbols.c, tagmanager/basic.c: * src/symbols.c, tagmanager/basic.c:

View File

@ -1186,20 +1186,30 @@ gboolean document_save_file(gint idx, gboolean force)
{ {
GError *conv_error = NULL; GError *conv_error = NULL;
gchar* conv_file_contents = NULL; gchar* conv_file_contents = NULL;
gsize bytes_read;
gsize conv_len; gsize conv_len;
// try to convert it from UTF-8 to original encoding // try to convert it from UTF-8 to original encoding
conv_file_contents = g_convert(data, len-1, doc_list[idx].encoding, "UTF-8", conv_file_contents = g_convert(data, len-1, doc_list[idx].encoding, "UTF-8",
NULL, &conv_len, &conv_error); &bytes_read, &conv_len, &conv_error);
if (conv_error != NULL) if (conv_error != NULL)
{ {
gchar *context = NULL;
if (conv_error->code == G_CONVERT_ERROR_ILLEGAL_SEQUENCE)
{
context = g_malloc(4); // read 3 bytes from Sci + '\0'
sci_get_text_range(doc_list[idx].sci, bytes_read, bytes_read + 3, context);
}
dialogs_show_msgbox(GTK_MESSAGE_ERROR, dialogs_show_msgbox(GTK_MESSAGE_ERROR,
_("An error occurred while converting the file from UTF-8 in \"%s\". The file remains unsaved." _("An error occurred while converting the file from UTF-8 in \"%s\". The file remains unsaved."
"\nError message: %s\n"), "\nError message: %s\nThe error occurred at \"%s\"."),
doc_list[idx].encoding, conv_error->message); doc_list[idx].encoding, conv_error->message,
geany_debug("encoding error: %s)", conv_error->message); (context != NULL) ? context : _("unknown"));
geany_debug("encoding error: %s", conv_error->message);
g_error_free(conv_error); g_error_free(conv_error);
g_free(context);
g_free(data); g_free(data);
return FALSE; return FALSE;
} }