diff --git a/docs/help/in/recode.in b/docs/help/in/recode.in index c193b21c..4fdfa202 100644 --- a/docs/help/in/recode.in +++ b/docs/help/in/recode.in @@ -27,15 +27,15 @@ Examples: /SET recode_fallback to set the fallback charset for incoming events -This charset will be used when a conversion to -the defined charset(/recode add) fails or if the -charset for the target(query or channel) is not set. +This charset is used if your term_charset is UTF-8 +and the conversion for the target is not set and +the text is not UTF-8. /SET recode_out_default_charset to set the global outgoing charset -When it's set to a charset it will be used instead -of the charset you have defined with /recode add +When it's set to a charset it will be used +if no conversion for the target is set. /SET recode_transliterate ON to enable the global transliteration. diff --git a/src/core/recode.c b/src/core/recode.c index 07cbe50c..11128635 100644 --- a/src/core/recode.c +++ b/src/core/recode.c @@ -76,14 +76,14 @@ char *recode_in(const char *str, const char *target) int len; if (!str) - return g_strdup(str); + return NULL; len = strlen(str); str_is_utf8 = g_utf8_validate(str, len, NULL); translit = settings_get_bool("recode_transliterate"); - if (target != NULL && from == NULL) + if (target != NULL) from = iconfig_get_str("conversions", target, NULL); term_is_utf8 = recode_get_charset(&to); @@ -120,12 +120,11 @@ char *recode_out(const char *str, const char *target) #ifdef HAVE_GLIB2 char *recoded = NULL; const char *from = NULL; - gboolean translit; - gboolean term_is_utf8; + gboolean translit, term_is_utf8; int len; if (!str) - return g_strdup(str); + return NULL; len = strlen(str); @@ -135,10 +134,11 @@ char *recode_out(const char *str, const char *target) const char *to = NULL; char *translit_to = NULL; - /* default outgoing charset if set */ - to = settings_get_str("recode_out_default_charset"); + to = iconfig_get_str("conversions", target, NULL); if (to == NULL || *to == '\0') - to = iconfig_get_str("conversions", target, NULL); + /* default outgoing charset if set */ + to = settings_get_str("recode_out_default_charset"); + if (to && *to != '\0') { if (translit && !is_translit(to)) to = translit_to = g_strconcat(to ,"//TRANSLIT", NULL); @@ -150,7 +150,7 @@ char *recode_out(const char *str, const char *target) } if (!recoded) recoded = g_strdup(str); - + return recoded; #else return g_strdup(str); diff --git a/src/fe-common/core/fe-common-core.c b/src/fe-common/core/fe-common-core.c index 443204cb..ff26d2ca 100644 --- a/src/fe-common/core/fe-common-core.c +++ b/src/fe-common/core/fe-common-core.c @@ -175,7 +175,9 @@ void fe_common_core_init(void) settings_add_bool("lookandfeel", "use_status_window", TRUE); settings_add_bool("lookandfeel", "use_msgs_window", FALSE); #if defined (HAVE_NL_LANGINFO) && defined(CODESET) - settings_add_str("lookandfeel", "term_charset", nl_langinfo(CODESET)); + settings_add_str("lookandfeel", "term_charset", + *nl_langinfo(CODESET) != '\0' ? + nl_langinfo(CODESET) : "ISO8859-1"); #else settings_add_str("lookandfeel", "term_charset", "ISO8859-1"); #endif diff --git a/src/fe-common/core/fe-recode.c b/src/fe-common/core/fe-recode.c index a46e3547..b26a5cbe 100644 --- a/src/fe-common/core/fe-recode.c +++ b/src/fe-common/core/fe-recode.c @@ -165,7 +165,9 @@ static void read_settings(void) term_charset = settings_get_str("term_charset"); if (!is_valid_charset(term_charset)) { #if defined (HAVE_NL_LANGINFO) && defined(CODESET) - settings_set_str("term_charset", is_valid_charset(old_term_charset) ? old_term_charset : nl_langinfo(CODESET)); + settings_set_str("term_charset", is_valid_charset(old_term_charset) ? + old_term_charset : *nl_langinfo(CODESET) != '\0' ? + nl_langinfo(CODESET) : "ISO8859-1"); #else settings_set_str("term_charset", is_valid_charset(old_term_charset) ? old_term_charset : "ISO8859-1"); #endif