Can you try this patch and let me know what happens.
-- PGP Public key ID: 1024D/2DE827B3 fingerprint = 8797 A26D 0854 2EAB 0285 A290 8A67 719C 2DE8 27B3 See http://pgp.mit.edu or any PGP keyserver for public key.
diff --git a/src/libpspp/i18n.c b/src/libpspp/i18n.c
index f8e5e39..91db05c 100644
--- a/src/libpspp/i18n.c
+++ b/src/libpspp/i18n.c
@@ -61,6 +61,19 @@ create_iconv (const char* tocode, const char* fromcode)
return conv;
}
+static void
+dump_char_array (FILE *fp, const char *file, int line,
+ const char *text, int length)
+{
+ int i;
+ fprintf (fp, "%s:%d ", file, line);
+ for (i = 0; i < length; ++i)
+ {
+ fprintf (fp, "(0x%02x) ", (unsigned char) text[i]);
+ }
+ fprintf (fp, "\n");
+}
+
/* Return a string based on TEXT converted according to HOW.
If length is not -1, then it must be the number of bytes in TEXT.
The returned string must be freed when no longer required.
@@ -86,6 +99,9 @@ recode_string (enum conv_id how, const char *text, int length)
assert (how < n_CONV);
+ fprintf (stderr, "%s:%d Convertor %d\n", __FILE__, __LINE__, how);
+ dump_char_array (stderr, __FILE__, __LINE__, text, length);
+
if (convertor[how] == (iconv_t) -1)
return xstrndup (text, length);
@@ -148,6 +164,8 @@ recode_string (enum conv_id how, const char *text, int length)
*op = '\0';
+ dump_char_array (stderr, __FILE__, __LINE__, outbuf, strlen (outbuf));
+
return outbuf;
}
@@ -202,6 +220,8 @@ i18n_init (void)
free (charset);
charset = strdup (locale_charset ());
+ fprintf (stderr, "%s:%d Charset is \"%s\"\n", __FILE__, __LINE__, charset);
+
convertor[CONV_PSPP_TO_UTF8] = create_iconv ("UTF-8", charset);
convertor[CONV_SYSTEM_TO_PSPP] = create_iconv (charset, charset);
convertor[CONV_UTF8_TO_PSPP] = create_iconv (charset, "UTF-8");
diff --git a/src/ui/gui/helper.c b/src/ui/gui/helper.c
index 49dbfda..83319c4 100644
--- a/src/ui/gui/helper.c
+++ b/src/ui/gui/helper.c
@@ -160,6 +160,13 @@ pspp_locale_to_utf8 (const gchar *text, gssize len, GError **err)
return recode_string (CONV_PSPP_TO_UTF8, text, len);
}
+gchar *
+utf8_to_pspp_locale (const gchar *text, gssize len, GError **err)
+{
+ return recode_string (CONV_UTF8_TO_PSPP, text, len);
+}
+
+
#define _(msgid) gettext (msgid)
#define N_(msgid) msgid
diff --git a/src/ui/gui/helper.h b/src/ui/gui/helper.h
index 17e777a..ca15a35 100644
--- a/src/ui/gui/helper.h
+++ b/src/ui/gui/helper.h
@@ -44,7 +44,8 @@ GtkAction * get_action_assert (GtkBuilder *builder, const gchar *name);
GtkWidget * get_widget_assert (GtkBuilder *builder, const gchar *name);
/* Converts a string in the pspp locale to utf-8 */
-char * pspp_locale_to_utf8 (const gchar *text, gssize len, GError **err);
+gchar * pspp_locale_to_utf8 (const gchar *text, gssize len, GError **err);
+gchar * utf8_to_pspp_locale (const gchar *text, gssize len, GError **err);
void connect_help (GtkBuilder *);
diff --git a/src/ui/gui/psppire-data-store.c b/src/ui/gui/psppire-data-store.c
index f36fe38..45104f5 100644
--- a/src/ui/gui/psppire-data-store.c
+++ b/src/ui/gui/psppire-data-store.c
@@ -659,6 +659,7 @@ gboolean
psppire_data_store_set_string (PsppireDataStore *store,
const gchar *text, glong row, glong col)
{
+ gchar *s;
glong n_cases;
const struct variable *pv = psppire_dict_get_variable (store->dict, col);
if ( NULL == pv)
@@ -672,9 +673,12 @@ psppire_data_store_set_string (PsppireDataStore *store,
if (row == n_cases)
psppire_data_store_insert_new_case (store, row);
+ s = utf8_to_pspp_locale (text, -1, NULL);
+
psppire_data_store_data_in (store, row,
- var_get_case_index (pv), ss_cstr (text),
+ var_get_case_index (pv), ss_cstr (s),
var_get_write_format (pv));
+ free (s);
psppire_sheet_model_range_changed (PSPPIRE_SHEET_MODEL (store), row, col, row, col);
signature.asc
Description: Digital signature
_______________________________________________ pspp-dev mailing list [email protected] http://lists.gnu.org/mailman/listinfo/pspp-dev
