Как распечатать строку UTF-8 из программы на Haskell для CGI? - PullRequest
3 голосов
/ 07 марта 2011

Я пытаюсь создать CGI-программу на Haskell. (используя Apache) Но моя программа не может правильно печатать строку UTF-8.

module  Main    where

main    ::  IO()
main    =   do
        {
            putStr("Content-type: text/plain; charset=utf-8\n\n");
            putStr("English한글日本語abc");
        }

Результат проверен через telnet:

hhmm:appserve Eonil$ telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET http://localhost/cgi-bin/test HTTP\1.0

HTTP/1.1 200 OK
Date: Mon, 07 Mar 2011 07:31:28 GMT
Server: Apache/2.2.15 (Unix) mod_ssl/2.2.15 OpenSSL/0.9.8l DAV/2
Connection: close
Content-Type: text/plain; charset=utf-8

EnglishConnection closed by foreign host.
hhmm:appserve Eonil$ 

В чем проблема и что я должен сделать, чтобы это исправить?

PS. Программа хорошо печатается на консоли командной строки. А Apache CGI, созданный с помощью сценария оболочки, хорошо печатал строку UTF-8.

1 Ответ

2 голосов
/ 07 марта 2011

Чтобы убедиться, что putStr использует правильную кодировку, вы можете позвонить hSetEncoding на stdout, чтобы установить для нее "utf8".

http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.3.1.0/System-IO.html#g:23

...