我需要读一个包含'ç'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)
由于
答案 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