ロシア語の記号を含むファイルを処理しようとしています。読み取り時とファイルへのテキストの書き込み後に、次のような結果が得られます。
\160\192\231\229\240\225\224\233\228\230\224\237
通常のシンボルを取得するにはどうすればよいですか?
ロシア語の記号を含むファイルを処理しようとしています。読み取り時とファイルへのテキストの書き込み後に、次のような結果が得られます。
\160\192\231\229\240\225\224\233\228\230\224\237
通常のシンボルを取得するにはどうすればよいですか?
バックスラッシュと数字を含む文字列を取得している場合、「putStr」を呼び出したいときに「print」を呼び出しているように聞こえます。
私は成功しました。
{-# 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
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 ライクなシステムでも問題なく動作すると思います。ただし、ファイルへの書き込みはすべてのシステムで成功するはずです。
アップデート:
エンコード パッケージの使用例。