虽然我遇到了很多Haskell编码问题的问题,但我仍无法解决以下问题:
我想要读取许多不同的文本文件;这些文件的字符编码可能不一致,并且我使用的任何readFile函数在读取某些文件时都会抛出异常。
我试图概括问题:以下情况总结了它的核心。
import Prelude hiding (writeFile, readFile)
import qualified Text.Pandoc.UTF8 as UTF (readFile, writeFile, putStr, putStrLn)
import qualified Prelude as Prel (writeFile, readFile)
import Data.ByteString.Lazy (ByteString, writeFile, readFile)
在ghci中,我得到以下结果:
*Main> Prel.readFile "Test/A.txt"
*** Exception: Test/A.txt: hGetContents: invalid argument (invalid byte sequence) "\226\8364
*Main> Prel.readFile "Test/C.txt"
"\8230\n"
*Main> UTF.readFile "Test/A.txt"
"\8221\n"
*Main> UTF.readFile "Test/C.txt"
*** Exception: Cannot decode byte '\x85':
Data.Text.Internal.Encoding.Fusion.streamUtf8: Invalid UTF-8 stream
也许以下信息可以帮到您:
- getLocaleEncoding 返回 CP1252 编码 - 两个“有问题”的文本文件的 ByteString 内容如下:
``` *Main> readFile "Test/A.txt" "\226\128\157\r\n" *Main> readFile "Test/C.txt" "\133\r\n" ```
我的问题是:如何捕获、处理或避免这些字符编码错误?重点是:我不知道文本文件的编码,我需要一个适用于所有文本文件的 readFile 方法。如果不可能,并且当抛出异常时,我希望能够捕获异常并使程序继续执行,以便尝试另一个 readFile 函数,或者只需跳过该文本文件并进入下一个。