3

我想pipes-csv用来解析一些大型 CSV 文件,但事实证明这些 CSV 文件是 Latin-1 编码的,而且它所依赖pipes-csv的库也假设为 UTF-8。cassava这最终会产生我需要处理的解析错误。

我采用的方法是复制将保存 CSV 数据的记录,以便所有Text字段都是ByteStringdup 中的字段。我解码到 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

它用不必要的记录换取不必要的文本重新编码,但这是一种改进。我不认为有办法做到这一点而不做这些不必要的事情?

4

0 回答 0