Частичное декодирование 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 предполагает, что они либо потребуют тот же подход, либо потребуют патч для предоставления функции, аналогичной описанной выше, которую они используют внутри.

Другие вопросы по тегам