私は奇妙な文字を含むMAIL.txt
ファイルを持っています(このファイルはWindowsから来ていて、私はLinuxです)。それは文字列rec
を含んでいます。ターミナルでgrep "rec" MAIL.txt
を実行すると、予想される出力が得られます。奇妙なファイルのためにHaskellのreadProcess "grep"に失敗しました
ただし、このコマンドは、Haskellで失敗します。
Prelude System.Process> r <- readProcessWithExitCode "grep" ["rec", "MAIL.txt"] ""
*** Exception: fd:13: hGetContents: invalid argument (invalid byte sequence)
説明は何であると(変なファイルを変更せずに)それを回避するための方法ですが?これらの文字をアクセントする必要があります実際には
:ここ
あなたは奇妙な文字を見ることができるgrep
の出力です。
私はreadFile
でファイルを読み取ることができません。
> r <- readFile "MAIL.txt"
> r
"Bonjour,\r\n\r\n Quelques remarques sur cette fiche :\r\n\r\n- *** Exception: MAIL.txt: hGetContents: invalid argument (invalid byte sequence)
はたぶんData.Binaryの問題を検出する方法はありますか?
ErikRの答え@細部へのソリューション
:process-extrasパッケージから
import System.Process.ByteString (readProcessWithExitCode)
import Data.ByteString (ByteString, empty)
import qualified Data.ByteString.Char8 as B
import System.Exit (ExitCode)
(err, stdout, stderr) <- readProcessWithExitCode "grep" ["rec", "MAIL.txt"] empty
B.putStrLn stdout
ファイルの正確なエンコーディングを知っていますか? – danidiaz
おそらく、ファイルはlatin-1でエンコードされています。これはHaskell(今日のLinuxのほとんどのアプリケーション)がutf8としてデコードしようとしているときです。 – chi
私はアクセント付きのlatin-1ファイルでreadFileを試しましたが、Haskellは\ 218のような文字コードを表示しますが、クラッシュしません。問題が発生した小領域にファイルを縮小して投稿するようにしてください。 –