Haskell IO俄罗斯符号

时间:2010-05-15 12:41:25

标签: haskell character-encoding cyrillic

我尝试用俄语符号写的处理文件。读取和写入文本后,我得到类似的东西:

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

我如何获得正常的符号?

由于

3 个答案:

答案 0 :(得分:4)

如果您正在使用反斜杠和数字输入字符串,那么当您想要调用“putStr”时,听起来您可能正在调用“print”。

答案 1 :(得分:2)

如果您处理Unicode,可以尝试utf8-string package

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系统上正常工作。但是,写入文件应该在所有系统上都是成功的。

更新:

An example关于编码包使用情况。

答案 2 :(得分:1)

我取得了成功。

{-# 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