setlocale
Simon Marlow
simonmarhaskell at gmail.com
Thu Mar 13 18:31:37 EDT 2008
Tristan Allwood wrote:
> I've been playing around with hs-curses and utf8, and have discovered
> that I need to use an ffi call at the top of my main to
> setlocale(LC_ALL, "") in order to get the hscurses bindings to display
> utf8-encoded strings correctly.
>
> If I understand correctly, the fact that I need to do this means that
> the ghc rts is either not setting the default locale, or is forcing it
> to be a c-style one. With that as my context I'm just wondering:
>
> a) if this is a known issue
>
> b) if there's a known work-around other than rolling your own ffi
> wrapped call (a library function that I'm not aware of)
>
> c) any side effects this might have elsewhere
>
> d) if I'm being stupid and could get this to work by just using env vars
Correct, the RTS does not set the locale. It used to at one stage, when
we used the C isw* functions to implement Data.Char.isAlpha and so on,
but now we use our own Unicode tables so we don't need to set the locale.
There probably ought to be a way to call setlocale via System.Posix, but
it doesn't look like there is yet.
Setting the locale *might* have side-effects, for instance we noticed
before that heap profiling broke in some locales because the RTS code to
generate the .hp file was using fprintf to print numbers, and the number
format depends on the locale. Strictly speaking this is a bug in GHC,
we should be generating the heap profile data in a fixed known format.
If this happens to you, please file a ticket.
Cheers,
Simon
More information about the Glasgow-haskell-users
mailing list