2009. 10. 7.

Apapche CGI로 동작하는 SBCL 스크립트의 문제점.


#!/usr/local/bin/sbcl --script

(format t "Content-type:text/html; charset=UTF-8~%")
(format t "~%")
(format t "~A~%" (stream-external-format *standard-output*))

Above cgi script returns which charset is on the script running. I hope it'll return UTF-8 but I got ASCII.
Well.. may be some problem is there with Apache CGI.

분명히 위의 스크립트를 실행시키면 UTF-8이 나와줄거라고 믿었지만 결론은 ASCII가 나왔다.
Apache CGI에서 기본 실행시 ASCII로 돌리는 것 같은데.. 환경변수를 UTF-8로 변환할 방법을 모르겠다.
아니면 unicode를 출력할 적절한 방법을 찾아야할텐데 좀 갑갑하다..

이 문제는 apache의 mod_env를 사용해서 풀게되었다.
mod_env는 환경변수를 지정해서 이를 CGI등으로 보낼 수 있도록 하는 모듈이다.
LC_CTYPE을 UTF-8로 지정하는 방법을 사용해서 SBCL이 유니코드로 동작하게 만들었다.

방법은


  1. /etc/apache2/mods-enabled 에 /etc/apache2/mods-available/env.load 의 심볼릭링크를 만들고

  2. /etc/apache2/mods-available/env.conf를 다음과 같이 만든다.

    SetEnv LC_CTYPE en_US.UTF-8<br />SetEnv LANG en_US.UTF-8<br /><br /><br />


  3. /etc/apache2/mods-enabled 에 /etc/apache2/mods-available/env.conf 의 심볼링링크를 만든다.
  4. apache2를 재시작한다.
이제 깔끔하게 출력된다. 그동안의 삽질 이제 끝~~

댓글 없음:

댓글 쓰기