Well, I've read the manual about scm_*_locale_string.
It shows:
-----------------------------------
Note that these functions should not be used to convert C string constants,
because
there is no guarantee that the current locale will match that of the source
code. To
convert C string constants, use scm_from_latin1_string, scm_from_utf8_string
or scm_from_utf32_string.
------------------------------------

I think there's in a dilemma. According to the manual, we should convert
string or change locale in the users' code.
But Guile will break in (command-line) proc, because Chinese string as
command arguments can not get valid result from  "u32_conv_from_encoding"
called by "scm_from_stringn", and raised an error.
So we don't have any chance to convert it or change locale from environment
in the users' code because Guile has already crashed by "decoding-error".

Now I have two questons:
1. Maybe we raised this "decoding-error" too early. Can we let
"scm_from_locale_stringn" just return the string which wasn't recognized as
a bytevector? Then we may convert it as wish. But it's confused for
"scm_from_locale_stringn" returning a bytevector;
2. Why not let "scm_from_locale_stringn" return string according to the
locale from current environment as my patch?

Reply via email to