我需要将ByteStrings从各种编码解码为Text,但ByteStrings可能是不完整的片段。理想情况下,我需要一个具有以下内容的签名功能:
decodeFragment :: Encoding -> ByteString -> (Text, ByteString)
返回成功解码的Text以及任何未形成完整unicode字符的剩余字节(因此,当我得到下一个片段时,我可以重新使用这些字节)。
这种功能在某些Haskell库中是否已经存在,还是我需要自己编写?就目前而言,我甚至可以开始使用不支持UTF-8以外编码的东西。
答案 0 :(得分:2)
棘手。通常,encoding是我对编码和解码文本的首选建议,但我不相信它提供了您要求的确切内容。它接近,因为它提供
decodeChar :: (Encoding enc, ByteSource m) => enc -> m Char
您可以迭代以获得m String
。捕获decodeChar
引发的错误将告诉您是否已经到达片段的末尾。粗略看一下Hackage上的一些其他编码软件包表明他们要么需要相同的方法,要么需要一个补丁来公开类似于他们内部使用的上述函数。