1
我試圖用UTF8字符串使用包RSS,但沒有效果。 (我不想使用HXT的工程,我只想了解我的錯在哪裏)如何獲取utf8 rss feed?
在ghci當我把「測試」我只是得到垃圾與字符,如「é」。
如果我從UTF8.readFile
讀取文件中的字符串並將其發送到parseFromString
它可以工作,但是當我下載並使用getRespBody
時,它不會。
這裏是我的示例代碼:
import Network.HTTP (simpleHTTP, getRequest, getResponseBody)
import Data.Maybe (fromJust)
import Text.Feed.Import (parseFeedString)
import Text.RSS.Syntax
import Text.Feed.Types (Feed(..))
import Prelude hiding (putStrLn)
import Data.ByteString.Char8 (putStrLn)
import Data.ByteString.UTF8 (fromString)
siteUrl = "http://radiofrance-podcast.net/podcast09/rss_11549.xml"
type Links = [(String,String,String)]
-------------------------------------------------------------------------------
-- Main function
-------------------------------------------------------------------------------
test = getLinks siteUrl >>= mapM_ (putStrLn.fromString)
-------------------------------------------------------------------------------
-- Retrieve titles
-------------------------------------------------------------------------------
getLinks:: String -> IO [String]
getLinks url = simpleHTTP (getRequest url) >>= getResponseBody >>= parseDoc
parseDoc d = do
let RSSFeed rss = (fromJust . parseFeedString) d
items = rssItems.rssChannel $ rss
titles = map (fromJust.rssItemTitle) items
return $ titles
更新: 感謝羅馬的回答,我已經修改了我的代碼。以下是對可能感興趣的任何人的修改。
import Codec.Binary.UTF8.String (decodeString) -- <-- added
getLinks:: String -> IO [String]
getLinks url = simpleHTTP (getRequest url) >>= getResponseBody >>= parseDoc.decodeString -- <-- modified
謝謝,我重讀了utf8-string包和函數'decode'製作的竅門。我將更新代碼以共享解決方案。 –