본문 바로가기

Coding-Study/Coding-Study-Haskell

Haskell 하스켈에서 유니코드(한글) 출력하기

Windows 위에서 돌아가는 Haskell은

Windows의 세팅과 GHC 세팅의 충돌(?)로 인해 유니코드 출력에 난항을 겪을 수 있다.


이 때에는 다음 두 줄을 Import하고


import GHC.IO.Encoding
import System.Win32.Console


다음 두 줄을 IO 전에 사용해주면 된다. (모두 IO () 타입이다.)


setLocaleEncoding utf8 setConsoleOutputCP 65001

이들을 추가하면 정상적으로 출력이 된다.


다음은 간단한 예시 프로그램이다. cmd에 한글 글꼴이 적용되어 있지 않을 수도 있기에 (외국 윈도우의 경우가 그렇다) 한글이 아닌 화살표를 출력하는 것으로 작성해 놓았다.

main :: IO ()
main = do
  setLocaleEncoding utf8
  setConsoleOutputCP 65001
  putStrLn "→"


P.S. 만일 문제가 있다면 사용환경(윈도우 버전, GHC 버전 등)과 함께 에러메시지를 댓글로 알려주기를 바란다.


P.S.2. 위 해법은 GHCI에서는 동작하지 않는다. GHC로 컴파일하는 프로그램에서만 동작한다.

GHCI에서 위 방법을 사용할 경우 아래와 같은 에러 메시지를 보게 될 것이다.


*** Exception: <stdout>: hPutChar: invalid argument (invalid character)

'Coding-Study > Coding-Study-Haskell' 카테고리의 다른 글

Haskell 도전기 - 3  (0) 2015.02.15
Haskell 도전기 - 2  (0) 2015.02.05
Haskell 도전기 - 1  (0) 2015.02.03