我正在使用Haskell编写解析器,但是这个错误是我无法通过的错误。这是我的代码:
main = do
arguments <- getArgs
let fileName = head arguments
fileContents <- readFile fileName
converter <- open "UTF-8" Nothing
let titleLength = length fileName
titleWithoutExtension = take (titleLength - 4) fileName
allNonEmptyLines = unlines $ tail $ filter (/= "") $ lines fileContents
当我尝试使用“US-ASCII”编码读取文件时,我得到了着名的错误hGetContents:无效的参数(无效的字节序列)。我试图通过“US-ASCII”更改我的代码中的“UTF-8”,但错误仍然存在。有没有办法读取这些文件,或任何类型的文件处理编码问题?
答案 0 :(得分:5)
您应hSetEncoding
配置特定文本编码的文件句柄,例如:
import System.Environment
import System.IO
main = do
(path : _) <- getArgs
h <- openFile path ReadMode
hSetEncoding h latin1
contents <- hGetContents h
-- no need to close h
putStrLn $ show $ length contents
如果您的文件包含非ASCII字符并且它不是UTF8编码的,那么latin1是一个不错的选择,尽管它不是唯一的可能性。