Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修复haskell中损坏的utf8编码_Haskell_Utf 8_Character Encoding - Fatal编程技术网

修复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:Haskell
    String
    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/"),...]