Haskell readFile нелегальный Чар - PullRequest
       13

Haskell readFile нелегальный Чар

1 голос
/ 22 декабря 2010

Мне нужно прочитать файл, содержащий символы типа 'ç' ou 'á' ... Проблема в том, что когда я пытаюсь прочитать файл в формате txt, 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 Ответ

9 голосов
/ 22 декабря 2010

Data.ByteString.readFile читает файл как необработанный поток байтов, тогда как System.IO.readFile использует localeEncoding для декодирования символов и генерирует исключения, если содержимое файла не может быть декодировано в соответствии с вашим текущим языковым стандартом.

Если вы хотите продолжать использовать String вместо ByteString + декодировать, и вам известна кодировка файла, вы можете указать его с помощью

do handle <- openFile a ReadMode
   hSetEncoding handle latin1  -- or whatever applies
   x <- hGetContents handle
...