Частичное декодирование ByteStrings в текст
Мне нужно декодировать ByteStrings из различных кодировок в Text, но ByteStrings могут быть неполными фрагментами. В идеале мне нужна функция с подписью чего-то вроде:
decodeFragment :: Encoding -> ByteString -> (Text, ByteString)
который возвращает успешно декодированный текст, а также любые оставшиеся байты, которые не сформировали полный символ Unicode (поэтому я могу повторно использовать эти байты, когда получу следующий фрагмент).
Есть ли такая функция в какой-то библиотеке Haskell, или мне нужно свернуть свою собственную? На данный момент я мог бы даже начать с чего-то, что не поддерживает кодировки за пределами UTF-8.
1 ответ
Tricky. Обычно кодирование - это мое основное предложение для кодирования и декодирования текста, но я не верю, что оно предлагает именно то, о чем вы просите. Это близко, в том, что он предлагает
decodeChar :: (Encoding enc, ByteSource m) => enc -> m Char
который вы можете повторить, чтобы получить m String
, Поймать ошибки, брошенные decodeChar
скажу вам, если вы подошли к концу фрагмента. Беглый взгляд на некоторые из других пакетов кодирования в Hackage предполагает, что они либо потребуют тот же подход, либо потребуют патч для предоставления функции, аналогичной описанной выше, которую они используют внутри.