我想pipes-csv
用来解析一些大型 CSV 文件,但事实证明这些 CSV 文件是 Latin-1 编码的,而且它所依赖pipes-csv
的库也假设为 UTF-8。cassava
这最终会产生我需要处理的解析错误。
我采用的方法是复制将保存 CSV 数据的记录,以便所有Text
字段都是ByteString
dup 中的字段。我解码到 dup,然后手动将 Latin-1 字符串翻译成 UTF-8 并创建最终记录。至少可以说不雅。
有没有更好的办法?
根据丹尼尔的建议,这是我目前所拥有的:
import qualified Pipes.Text.Encoding as PTE
import qualified Pipes.ByteString as PB
withFile "file.csv" ReadMode $ \h -> do
let transcode = PTE.decodeIso8859_1 . PB.fromHandle ~> PTE.encodeUtf8
runEffect $ decodeByName (void . transcode $ h) >-> process
它用不必要的记录换取不必要的文本重新编码,但这是一种改进。我不认为有办法做到这一点而不做这些不必要的事情?