Как GHC / Haskell решает, какой символ кодировать? s собирается декодировать / кодировать из / в?

Кажется, что GHC, по крайней мере, несовместим в кодировке символов, из которой он решает декодировать.

Рассмотрим файл omatase-shimashita.txt со следующим содержимым, закодированным в UTF-8: お 待 た せ し ま し た

readFile , кажется, читает это правильно .. .

Prelude> content <- readFile "/home/chris/Desktop/omatase-shimashita.txt"
Prelude> length content
8
Prelude> putStrLn content
お待たせしました

Однако, если я напишу простой "эхо-сервер", он не будет декодировать со значением по умолчанию UTF-8. Рассмотрим следующий код, который обрабатывает входящего клиента:

handleClient handle = do
  line <- hGetLine handle
  putStrLn $ "Read following line: " ++ toString line
  handleClient handle

И соответствующий клиентский код, явно отправляющий UTF-8:

Data.ByteString.hPutStrLn handle $ Codec.Binary.UTF8.Generic.fromString "お待たせしました"

Разве это не противоречие? Есть ли способ справиться с этим безумием? Я планирую переписать свое приложение (я), чтобы явно использовать объекты ByteString и явно кодировать и декодировать с помощью Codec.Binary.UTF8 , но было бы хорошо знать, что здесь происходит в любом случае ...: o /

ОБНОВЛЕНИЕ: Я использую Ubuntu Linux, версия 10.10, с языковым стандартом en_US.UTF-8 ...

$ cat /etc/default/locale 
LANG="en_US.UTF-8"
$ echo $LANG 
en_US.UTF-8
12
задан Chris W. 14 March 2011 в 17:20
поделиться