修复haskell中损坏的utf8编码
在这样的人的帮助下,我成功地实现了一个。 但还有一个问题:如何修复提要项标题的坏编码? 以下是最简单的工作示例:修复haskell中损坏的utf8编码,haskell,utf-8,character-encoding,Haskell,Utf 8,Character Encoding,在这样的人的帮助下,我成功地实现了一个。 但还有一个问题:如何修复提要项标题的坏编码? 以下是最简单的工作示例: import Control.Monad import Control.Applicative import Network.HTTP import Text.Feed.Import import Text.Feed.Query import Text.Feed.Types import Data.Maybe import qualified Data.ByteString as B
import Control.Monad
import Control.Applicative
import Network.HTTP
import Text.Feed.Import
import Text.Feed.Query
import Text.Feed.Types
import Data.Maybe
import qualified Data.ByteString as B
import Network.URI (parseURI, uriToString)
import Codec.Binary.UTF8.String (decodeString, encodeString)
getTitleAndUrl :: Item -> (Maybe String, Maybe String)
getTitleAndUrl item = (getItemTitle item, getItemLink item)
downloadUri :: (Maybe String,Maybe String) -> IO ()
downloadUri (Just title,Just link) = do
item <- get link
B.writeFile title item
where
get url = let uri = case parseURI url of
Nothing -> error $ "invalid uri" ++ url
Just u -> u in
simpleHTTP (defaultGETRequest_ uri) >>= getResponseBody
downloadUri _ = print "Somewhere something went Nothing"
getTuples :: IO (Maybe [(Maybe String, Maybe String)])
getTuples = fmap (map getTitleAndUrl) <$> fmap (feedItems) <$> parseFeedString <$> decodeString <$> (simpleHTTP (getRequest "http://index.hu/24ora/rss/") >>= getResponseBody)
main = getTuples
我做了一些研究,feed的条目标题被四舍五入,所以xml解析器跳过了它们
示例项:
http://velvet.hu/blogok/helyszinelo/2013/06/18/gyalogossbaleset_miatt_all_a_tomegkozlekedes_a_margit_hidon/
2013年6月18日星期二09:08:00+0200
如何强制对该字符串进行utf8编码?好的,我将我的注释复制到这里:
Haskell字符串是Unicode字符串。它们不是UTF-8或UTF什么的——它们只是Unicode代码点列表
您只需查看字符串的show
结果。这就是Show
实例的工作原理——对此您将无能为力。如果您打印字符串,例如使用putStrLn
,您将看到它打印得很好。字符串是正确的,只是你看它的方式漏掉了一些字符
我不确定我是否理解这个问题。你不喜欢这里的什么行为?UTF-8与此有什么关系?如果它按照你想要的方式运行,会有什么不同呢?@shachaf:t\246megk\246zleked\233s->tömegközlekedés等等……好的。1:HaskellString
s是Unicode字符串。它们不是UTF-8或UTF什么的——它们只是Unicode代码点列表。2:您只需查看字符串的show
结果。这就是Show
实例的工作原理——对此您将无能为力。如果您打印字符串,例如使用putStrLn
,您将看到它打印得很好。字符串是正确的,只是你看它的方式漏掉了一些字符。@shachaf:谢谢,现在我明白了。我很乐意接受这个答案。
Just [...,(Just "Gyalogosbaleset miatt \225ll a t\246megk\246zleked\233s a Margit h\237don",Just "http://velvet.hu/blogok/helyszinelo/2013/06/18/gyalogossbaleset_miatt_all_a_tomegkozlekedes_a_margit_hidon/"),...]