6

我试图处理一个包含俄语符号的文件。在读取文件并将一些文本写入文件后,我得到如下信息:

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

我怎样才能得到正常的符号?

4

3 回答 3

7

如果你得到带有反斜杠和数字的字符串,那么当你想调用“putStr”时,听起来你可能会调用“print”。

于 2010-05-15T16:23:34.283 回答
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 系统上正常工作。但是,在所有系统上都应该成功写入文件。

更新:

一个关于编码包使用的例子。

于 2010-05-15T13:19:30.167 回答
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
于 2010-05-16T15:54:08.537 回答