Частичное декодирование ByteStrings в текст - PullRequest
7 голосов
/ 22 июля 2011

Мне нужно декодировать ByteStrings из различных кодировок в Text, но ByteStrings могут быть неполными фрагментами. В идеале мне нужна функция с подписью чего-то вроде:

decodeFragment :: Encoding -> ByteString -> (Text, ByteString)

, который возвращает успешно декодированный текст, а также все оставшиеся байты, которые не образовали полный символ Юникода (поэтому я могу повторно использовать эти байты, когда получу следующий фрагмент).

Функция такого рода уже существует в некоторой библиотеке на Haskell или мне нужно свернуть свою собственную? На данный момент я мог бы даже начать с чего-то, что не поддерживает кодировки помимо UTF-8.

1 Ответ

2 голосов
/ 22 июля 2011

Tricky. Обычно, кодировка - это мое предложение о кодировании и декодировании текста, но я не верю, что оно предлагает именно то, что вы просите. Это близко, в том, что он предлагает

decodeChar :: (Encoding enc, ByteSource m) => enc -> m Char

, который вы можете повторить, чтобы получить m String. Поймав ошибки, выданные decodeChar, вы узнаете, дошли ли вы до конца фрагмента. Беглый взгляд на некоторые из других пакетов кодирования в Hackage показывает, что им либо потребуется тот же подход, либо потребуется патч для предоставления функции, аналогичной описанной выше, для внутреннего использования.

...