2013-07-30 5 views
2

Я ищу лучший способ конвертировать из Word8 в Text, проблема заключается в том, что использование функции runChildrenWithText для Heist требует ввода текста для привязки, но функция getParam возвращает ByteStrings, которую я могу преобразовать в Word8 но не текст из любого из этих форматов, поэтому у меня возникают проблемы с решением вопроса о том, куда идти отсюда, любая помощь, касающаяся наилучшего способа решения этой проблемы, оценивается.Haskell Word8 в текстовый формат

+1

Я не знаком с Хейстом, но это звучит для меня так же, как вы не хотите конвертировать Word8 в текст. Вместо этого вы хотите преобразовать либо '[Word8]', либо 'ByteString' в' Text'. Это верно? – mhwombat

+0

ByteString to Text, вероятно, будет наиболее полезен, единственная причина, по которой я упомянул Word8 для текста, - это то, что мне удалось найти, как преобразовать ByteStrings в Word8. – stickybynature

ответ

5

Data.Text.Encodings упаковка содержит множество способов преобразования ByteString s в Text. Обратите внимание, что возможно, что ByteString - Text кодировка сбой (скажем, вы предполагаете, что ByteString содержит данные UTF-8, но на самом деле это не так), так что это более сложный процесс, чем просто convert :: ByteString -> Text.

В этом случае decodeUtf8 :: ByteString -> Text будет вызывать нечистые исключения, поэтому decodeUtf8' :: ByteString -> Either UnicodeException Text может быть предпочтительнее, если есть вероятность отказа декодирования.

Вы также можете построить более сложные схемы обработчиков ошибок декодирования, используя decodeUtf8With :: OnDecodeError -> ByteString -> Text и Data.Text.Encodings.Error.

+0

Из-за любопытства, каковы другие кодировки, используемые 'ByteString' – DiegoNolan

+2

' ByteString' не закодированы, это, по сути, просто «векторные слова8», чистые двоичные данные. Для удобства у него есть экземпляр «IsString», который позволяет вам притворяться, что это «String». 'Text' кодируется в кодировке UTF-16, но вы можете думать о нем как о« векторных »кодовых пунктах Unicode. Функции, принимающие 'ByteString' в' Text', предполагают, что 'ByteString' является своего рода кодированным потоком кодовой точки, а затем пересылает его в Unicode и сохраняет его как UTF-16. Это первое предположение может потерпеть неудачу, что приведет к ошибкам. –

+1

@DiegoNolan Вот [список общих кодировок] (http://en.wikipedia.org/wiki/Character_encoding#Common_character_encodings). Как сказал tel, ByteString - это всего лишь байты. Для того, чтобы эти байты были конвертируемыми в текст любым способом, вы должны использовать кодировку символов. –

Смежные вопросы