Haskell IO 俄文符号

6

我正在尝试处理一个包含俄语符号的文件。当读取并写入一些文本到文件后,我得到了以下类似的内容:

\160\192\231\229\240\225\224\233\228\230\224\237

如何获取正常的符号?


我尝试解析网页www.trade.su/search?ext=1。 - Anton
3个回答

8

如果你获取的字符串中包含反斜杠和数字,那么很可能你想要调用“putStr”,而不是“print”。


2
如果你处理Unicode,你可以尝试使用utf8-string包
import System.IO hiding (hPutStr, hPutStrLn, hGetLine, hGetContents, putStrLn)
import System.IO.UTF8
import Codec.Binary.UTF8.String (utf8Encode)
main = System.IO.UTF8.putStrLn "Вася Пупкин"

然而,在我的Windows CLI中,由于代码页的原因,它并没有很好地工作,输出混乱。如果您的区域设置正确,则我希望它在其他类Unix系统上可以正常工作。但是,写入文件应该在所有系统上都成功。
更新: 一个示例,展示了如何使用编码包。

2
那么编码包可能会有用,它具有System.Encoding.CP1251 - YasirA
这个不起作用:{-# LANGUAGE ImplicitParams #-} import Text.HTML.TagSoup import Text.HTML.Download import Prelude hiding (appendFile) import System.IO.Encoding import Data.Encoding.CP1251main :: IO () main = do tags <- fmap parseTags $ openURL "http://www.trade.su/search?ext=1" let r = partitions (~== "<input type=checkbox>") tags !! 1 let ?enc = CP1251 appendFile "out" (show r) - Anton
我刚放弃在Windows上安装编码包,手头没有Unix的GHC。你是如何成功安装它的,这很有趣。 - YasirA
我也无法在Windows上安装。 - Anton
@Anton:伙计,我不能再帮你了,因为我没有*nix的GHC,抱歉。我希望谷歌能帮到你。如果你在这里回答一下就好了。 ;) - YasirA
显示剩余7条评论

2

我取得了成功。

{-# LANGUAGE ImplicitParams #-}

import Network.HTTP
import Text.HTML.TagSoup
import Data.Encoding
import Data.Encoding.CP1251
import Data.Encoding.UTF8

openURL x =  do 
        x <- simpleHTTP (getRequest x)
        fmap (decodeString CP1251) (getResponseBody x)

main :: IO ()
main = do
    tags <- fmap parseTags $ openURL "http://www.trade.su/search?ext=1"
    let TagText r  = partitions (~== "<input type=checkbox>") tags !! 1 !! 4
    appendFile "out" r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接