2012-04-17 5 views
2

중국 이름이있는 파일에 내용을 출력하는 것과 같은 것을 테스트하고 있습니다.중국어 파일 이름이있는 Prelude.writeFile

파일은 올바른 내용으로 생성되지만 파일 이름은 생성되지 않습니다.

나는 writeFile^1을보고 파일 이름을 String으로 나타낸다. 이것이 근본 원인 일 수 있습니다.

file :: FilePath 
    file = "上海万达影城.html" 

    content :: String 
    content = "<h1>hello</h1>" 

    write2File :: IO() 
    write2File = writeFile file content 

도와 주셔서 감사합니다! 내 옆에

  1. GHC 업데이트

    - 사이먼

    ---------------------은 7.0.2

  2. 입니다 업그레이드 전에 해결 방법을 찾았습니다. 아래의 세부 사항 및

    import qualified Codec.Binary.UTF8.String as UTF8 
    file = UTF8.encodeString "上海万达影城.html" 
    
+0

http://stackoverflow.com/questions/3412577/haskell-char-unicode-and-turkish을 가지고있는 컴파일러 버전 및 OS GHC-7.4.1 여기 작품 –

+0

를? –

+0

@ 대니얼, 저는 ghc-7.0.2에서 실제로 일하고 있습니다. 그래서 나는 먼저 디트리히 Epp가 언급 한 해결책을 시도 할 것입니다. – Simon

답변

3

문자열과 같은 코드 변경을 참조 하스켈에서 유니 코드 코드 포인트의 목록입니다. 유니 코드 코드 포인트 목록에 대한 해석은 시스템에 따라 다릅니다. (이를 지원하기에는 너무 오래된 GHC가 필요합니다.)

일반적으로 로케일이 올바르게 설정되면 올바르게 작동합니다.


N.B. 과거에는 예를 들어 경고가있었습니다. 이전 버그 : System.Directory.getDirectoryContents unicode support - 문제 해결 방법이 필요할 수 있습니다.

+0

감사합니다. Don. 해결 방법은 매력처럼 작동합니다. – Simon

0

그동안 System.Posix.IO.ByteString 모듈을 사용할 수 있습니다. 이렇게하면 파일 경로를 바이트 문자열로 지정할 수 있으므로 직접 인코딩/디코딩을 할 수 있습니다.

이 버그는 알려진 버그이며 7.2.1에서 수정되었습니다.

http://hackage.haskell.org/trac/ghc/ticket/3307

+0

unix-2.5. * 패키지에는'System.Posix.IO.ByteString'이 있지만 유닉스 2.4에서 작동하고 있습니다. 나는 GHC를 업그레이드 할 기회를 얻은 후에 다시 검증 할 것이다. Dietrich에게 감사드립니다. – Simon