Symbols printed with `#{...#}' notation need to double backslashes when displaying as they serve as escape characters when reading. The behavior before this patch is clearly erroneous:
GNU Guile 2.0.7 [...] scheme@(guile-user)> (string->symbol "\\(") $1 = #{\\x28;}# scheme@(guile-user)> (symbol->string '#{\\x28;}#) $2 = "\\x28;" --- libguile/print.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libguile/print.c b/libguile/print.c index 50f5a3e..bb7fd84 100644 --- a/libguile/print.c +++ b/libguile/print.c @@ -448,7 +448,8 @@ print_extended_symbol (SCM sym, SCM port) SUBSEQUENT_IDENTIFIER_MASK | UC_CATEGORY_MASK_Zs)) { - if (!display_character (c, port, strategy)) + if (!display_character (c, port, strategy) + || (c == '\\' && !display_character (c, port, strategy))) scm_encoding_error ("print_extended_symbol", errno, "cannot convert to output locale", port, SCM_MAKE_CHAR (c)); -- 1.8.1.2