This hack makes Guile default to UTF-8. This avoids calls to `iconv_open'; `iconv_open' tries to open shared objects that aren't available during bootstrap, so using UTF-8 avoids that (and UTF-8 has built-in conversions in glibc, too.) diff --git a/libguile/bytevectors.c b/libguile/bytevectors.c index 0ac5ea6a6..f73301e2f 100644 --- a/libguile/bytevectors.c +++ b/libguile/bytevectors.c @@ -1931,7 +1931,7 @@ utf_encoding_name (char *name, size_t utf_width, SCM endianness) if (scm_i_is_narrow_string (str)) \ { \ err = mem_iconveh (scm_i_string_chars (str), c_strlen, \ - "ISO-8859-1", c_utf_name, \ + "UTF-8", c_utf_name, \ iconveh_question_mark, NULL, \ &c_utf, &c_utf_len); \ if (SCM_UNLIKELY (err)) \ diff --git a/libguile/ports.c b/libguile/ports.c index 45e62f4e4..42012f3aa 100644 --- a/libguile/ports.c +++ b/libguile/ports.c @@ -974,7 +974,9 @@ canonicalize_encoding (const char *enc) char *ret; int i; - if (!enc || encoding_matches (enc, sym_ISO_8859_1)) + if (enc == NULL) + return sym_UTF_8; + if (encoding_matches (enc, sym_ISO_8859_1)) return sym_ISO_8859_1; if (encoding_matches (enc, sym_UTF_8)) return sym_UTF_8; @@ -4198,7 +4200,7 @@ scm_init_ports (void) scm_c_define ("%default-port-conversion-strategy", scm_make_fluid_with_default (sym_substitute)); /* Use the locale as the default port encoding. */ - scm_i_set_default_port_encoding (locale_charset ()); + scm_i_set_default_port_encoding ("UTF-8"); scm_c_register_extension ("libguile-" SCM_EFFECTIVE_VERSION, "scm_init_ice_9_ports", diff --git a/libguile/strings.c b/libguile/strings.c index 056b4c99f..63a6c050d 100644 --- a/libguile/strings.c +++ b/libguile/strings.c @@ -1579,7 +1579,7 @@ scm_i_default_string_failed_conversion_handler (void) SCM scm_from_locale_stringn (const char *str, size_t len) { - return scm_from_stringn (str, len, locale_charset (), + return scm_from_stringn (str, len, "UTF-8", scm_i_default_string_failed_conversion_handler ()); } @@ -1907,7 +1907,7 @@ char * scm_to_locale_stringn (SCM str, size_t *lenp) { return scm_to_stringn (str, lenp, - locale_charset (), + "UTF-8", scm_i_default_string_failed_conversion_handler ()); } @@ -2195,7 +2195,7 @@ scm_to_stringn (SCM str, size_t *lenp, const char *encoding, scm_wrong_type_arg_msg (NULL, 0, str, "string"); if (encoding == NULL) - encoding = "ISO-8859-1"; + encoding = "UTF-8"; if (c_strcasecmp (encoding, "UTF-8") == 0) /* This is the most common case--e.g., when calling libc bindings @@ -2247,7 +2247,7 @@ scm_to_stringn (SCM str, size_t *lenp, const char *encoding, if (scm_i_is_narrow_string (str)) { ret = mem_iconveh (scm_i_string_chars (str), ilen, - "ISO-8859-1", encoding, + "UTF-8", encoding, (enum iconv_ilseq_handler) handler, NULL, &buf, &len);