On Tue, Jan 15, 2013 at 11:36 PM, Andy Wingo <wi...@pobox.com> wrote:

> Quiz: what does this do?
>
>   (define (f s)
>     (with-output-to-string (lambda () (display s))))
>
> When called with a string, what should it do?  Like (f "foo").
>
> If you answered, "return the string", that's what I would think it
> should do.
>
> But no, currently the answer is locale-specific.  It encodes the string
> according to the current locale, then decodes it from that encoding.  If
> your locale can't encode the string, tough luck for you!
>
> This is a bit crazy.  Surely the port should be textual?  Surely the
> default encoding for a string port should be utf-8 or something that can
> actually handle all strings?
>

Yes, the POSIX locale should refer to the external environment -
notably the terminal, command-line args and env variables.

Default file encodings are open to interpretation, but either using
POSIX or ignoring it completely and using heuristics combined with
overrides (e.g. -*- coding: ... -*-) are both reasonable.

But string ports are entirely internal - there's no reason to use
the locale for them.

-- 
Alex

Reply via email to