Кодировать строки, проанализированные HXT, в правильную строку UTF8

Я анализирую страницы в кодировке utf8, используя hxt, пример упрощенного парсера:

names = multi (hasName "h1") >>> proc h1 do
  name <- getText <<< getChildren -< h1
  returnA name

Все идет нормально, пока я не попытаюсь напечатать имена:

*Main > n
"\208\152\208\182\208\190\209\128\208\176-\208\161"
*Main > :t n
n :: String
*Main > putStrLn n
ÐжоÑа-С
*Main > Data.Text.IO.putStrLn $ Data.Text.pack n
ÐжоÑа-С

Я анализирую, используя опцию withInputEncoding "utf8", Как можно правильно закодировать строку, проанализированную по hxt?

1 ответ

Решение

Использование decodeUtf8 от Data.Text.Encoding в комбинации с pack от Data.ByteString.Char8.pack:

*Main > import Data.Text.Encoding as E
*Main > import Data.ByteString.Char8 as C
*Main > import Data.Text.IO as T

*Main > T.putStrLn . E.decodeUtf8 . C.pack $ n

Ижора-С
Другие вопросы по тегам