¿Cómo decide GHC / Haskell qué codificación de caracteres va a decodificar / codificar de / a?
arece que GHC es al menos inconsistente en la codificación de caracteres desde la que decide decodificar.
Considere un archivo,omatase-shimashita.txt
, con el siguiente contenido, codificado en UTF-8: お 待 た せ し ま し た
readFile
parece leer esto correctamente ...
Prelude> content <- readFile "/home/chris/Desktop/omatase-shimashita.txt"
Prelude> length content
8
Prelude> putStrLn content
お待たせしました
Sin embargo, si escribo un servidor "echo" simple, no se decodifica con un valor predeterminado de UTF-8. Considere el siguiente código que maneja un cliente entrante:
handleClient handle = do
line <- hGetLine handle
putStrLn $ "Read following line: " ++ toString line
handleClient handle
Y el código de cliente relevante, enviando explícitamente UTF-8:
Data.ByteString.hPutStrLn handle $ Codec.Binary.UTF8.Generic.fromString "お待たせしました"
¿Es este comportamiento no inconsistente? ¿Hay algún método para esta locura? Estoy planeando reescribir mis aplicaciones para usar explícitamenteByteString
objetos y codificar y decodificar explícitamente usandoCodec.Binary.UTF8
, pero sería bueno saber qué está pasando aquí de todos modos ...: o /
UPDATE: estoy ejecutando Ubuntu Linux, versión 10.10, con una configuración regional en_US.UTF-8 ...
$ cat /etc/default/locale
LANG="en_US.UTF-8"
$ echo $LANG
en_US.UTF-8