Хаскель И.О. русские символы - PullRequest
4 голосов
/ 15 мая 2010

Я пытаюсь обработать файл, который написан русскими символами. При чтении и после записи текста в файл я получаю что-то вроде:

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

Как я могу получить нормальные символы?

Спасибо

Ответы [ 3 ]

4 голосов
/ 15 мая 2010

Если вы получаете строки с обратными слешами и числами, это звучит так, как будто вы можете вызывать «print», когда хотите вызвать «putStr».

2 голосов
/ 15 мая 2010

Если вы работаете с 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, искажая вывод из-за кодовой страницы. Я ожидаю, что он будет работать нормально на других Unix-подобных системах, если ваш языковой стандарт установлен правильно. Однако запись в файл должна быть успешной во всех системах.

ОБНОВЛЕНИЕ:

Пример об использовании пакета кодирования.

1 голос
/ 16 мая 2010

У меня есть успех.

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