Haskell readFile非法Char

时间:2010-12-22 05:28:21

标签: file haskell io locale

我需要读一个包含'ç'ou'á'等字符的文件... 问题是,当我尝试读取文件时,GHC返回:非法字节序列。 有办法解决这个问题吗?

main = do putStr "Insert file path\n"
          a <- getLine
          x <- readFile a
          print x

Main> main
Main> Insert file path
Main> /Users/$HOME/Desktop/File.txt
Main> (illegal byte sequence)

由于

1 个答案:

答案 0 :(得分:9)

Data.ByteString.readFile将文件作为原始字节流读取,而System.IO.readFile使用localeEncoding解码字符,如果无法使用当前语言环境解码文件内容,则会抛出异常

如果您想继续使用String代替ByteString +解码,并且您知道文件的编码,则可以使用

指定它
do handle <- openFile a ReadMode
   hSetEncoding handle latin1  -- or whatever applies
   x <- hGetContents handle