2012-12-26 4 views
10

내/home 폴더의 파일을 읽도록 Haskell 스크립트를 만들고 싶습니다. 그러나 한자로 명명 된 많은 파일이 있으며 Haskell과 Ghci는이를 관리 할 수 ​​없습니다. Haskell과 Ghci는 UTF-8 문자를 잘 나타내지 못합니다. 여기Haskell 또는 ghci가 중국어 문자를 표시하고 스크립트라는 중국어 문자를 실행할 수있게 만드는 방법은 무엇입니까?

내가 만난 것입니다 :

Prelude> "让Haskell或者Ghci能正确显示汉字并且读取汉字命名的文档" 

"\35753Haskell\25110\32773Ghci\33021\27491\30830\26174\31034\27721\23383\24182\19988\35835\21462\27721\23383\21629\21517\30340\25991\26723" 
+7

이것은 정말로 당신의 질문에 답하지 않지만,'putStrLn'과 친구들과 함께 문자열을 출력하는 프로그램에는이 문제가 없을 것이라고 말 할 것입니다. 또한, [이 그래서 질문] (http://stackoverflow.com/questions/5535512/how-to-hack-ghci-or-hugs-so-that-it-prints-unicode-chars-unescaped) 도움이 될 수도 있습니다 너에게. – gspr

답변

18
Prelude> putStrLn "\35753Haskell\25110\32773Ghci\33021\27491\30830\26174\31034\27721\23383\24182\19988\35835\21462\27721\23383\21629\21517\30340\25991\26723" 
让Haskell或者Ghci能正确显示汉字并且读取汉字命名的文档 

GHC는 잘 유니 코드를 처리합니다. 이것에 대해 알아야 할 사항은 다음과 같습니다.

콘솔에서 읽거나 쓸 때 바이트 및 문자로 변환하기 위해 시스템 인코딩을 사용합니다. 귀하의 예제에서 올바르게 바이트에서 문자로 변환을했기 때문에 귀하의 시스템 인코딩이 올바르게 설정되었다고 말할 수 있습니다.

Stringshow 기능에는 제한된 출력 문자 집합이 있습니다. show 함수는 GHCI에서 표현식 평가 결과를 인쇄하고 print 함수를 사용하여 전달 된 값을 String 표현으로 변환합니다.

putStrputStrLn 기능은 실제로 콘솔에 정확하게 제공된 String을 작성하기위한 것입니다. 칼에

+0

"hGetLine h >> = hPutStr g"시도하고 대상 g에 해당하는 파일은 실제로 올바른 내용을 가져옵니다. 그러나 ghci는 한자를 정상적으로 표시 할 수 없습니다. – TorosFanny

+8

@ user1926094 : 그렇게하지 않는 것이 "할 수 없다"는 것입니다. 이스케이프 된 버전은 터미널이나 폰트 등으로 망가질 수 없으므로 이스케이프 처리하기 위해 *를 선택합니다. –

0

덕분에, 난 내 fuction를 주위의 래퍼로서 putStrLn을 사용 :

ghci> let removeNonUppercase st = [c | c <- st, c `elem` ['А'..'Я']] 
ghci> putStrLn (removeNonUppercase "Ха-ха-ха! А-ха-ха!") 
ХА 

모든 것이 잘 작동!

관련 문제