我有它的UTF-8字符的文件300MB(link)。我想写一个相当于以下内容的haskell程序:快速分析大量的UTF-8文本文件在Haskell
cat bigfile.txt | grep "^en " | wc -l
这在我的系统上以2.6秒运行。
现在,我在看文件作为一个普通的字符串(READFILE),并且有这样的:
main = do
contents <- readFile "bigfile.txt"
putStrLn $ show $ length $ lines contents
几秒钟后,我得到这个错误:
Dictionary.hs: bigfile.txt: hGetContents: invalid argument (Illegal byte sequence)
我承担我需要使用更多的utf-8友好的东西?我怎样才能使它和UTF-8兼容?我读了关于Data.ByteString.Lazy的速度,但真实世界Haskell说它不支持utf-8。
'grep的-c “^恩” bigfile.txt'更快。结果,无效的字节序列错误表示该文件不是有效的utf-8,或者您的文件句柄未设置为utf-8。如果你的ghc是最近的,它会默认读取区域设置编码的文件,检查它。如果它不是utf-8,'hSetEncoding stdin utf8'应该修复它。 –