#すいません。ちょっと日本語の扱いについて教えていただけないでしょうか。
#https://gist.github.com/1564437 こんなスクリプトを書いてみているのですが、curlコマンドに食わせるファイル名が化けてしまいます。 #xmlhtmlライブラリを使った場合に日本語の要素をうまく扱う方法を教えていただけないでしょうか。。。
#そのコードでは utf8-string を使っていますが、そもそも http://t.co/HPcOGMDB から取って来るデータは UTF-8 ではなく euc-jp なのでファイル名が化けてしまうのではないでしょうか? #えっとすいません。説明不足でした。
#curl -d p="All" -d c=a http://www.sampou.org/cgi-bin/haskell.cgi > all.html
nkf -w8 < all.html > all_utf8.html
してall_utf8.htmlを標準入力に食わせています。。。
#Unix 環境なら、utf8-string ではなく System.IO モジュールの mkTextEncoding 関数で euc-jp を指定することで、http://t.co/HPcOGMDB から目的のデータを正しく取得できると思います。 ##うううーちょっとためしてみます。。。
#あらっ、そうでしたか。
#> nkf で UTF-8 のデータに変換している
#取得後のデータは String や Text であって ByteString ではないので、適当に UTF-* な ByteString に変換してください。
#Data.ByteString.UTF8 の fromString をかましているつもりなのですが。。。うーん https://gist.github.com/1564437 #多分,Text で取得して、Data.Text.Encoding の encodeUtf* で ByteString にするのが良いと思います。
#あっ、utf8-string ではなく、System.IO モジュールで提供されている Handle での encode/decode を利用する場合の話です。
##locale encoding は UTF-8 ですか? そうでなければ hSetEncoding でハンドルに utf8 を指定する必要がありますね。
#あと、parseHTML した結果できる Document 型の値の Encoding フィールドはちゃんと UTF8 になっていますか? http://t.co/vhFBuQiF #let Right (HtmlDocument en _ nodes) = parseHTML "stdin" $ encodeUtf8 con
#とした直後でprint enするとUTF8になってます。。。
#なんか盛大にかんちがいしている気がします。。。
#どう化けてるかを調べると手がかりになるかも?
#あれ。pandoc使うとputStrLnする分には日本語出ます。。。
#xmlhtmlさん。。。
#ひょっとしてsystem関数ってutf8通らなかったりするのでしょうか。。。
#systemが通してないのか、systemが呼び出してるシェルが通してないのか、curlコマンドが通してないのか、色々可能性が。
#いや。system "echo curl hogehoge"しているので、systemが通していないことになります。
#shellが通していない、、、というのは、、、通すと思いこんでました。。。
#たしかcurlのライブラリがあったような気がするので、system使わずにそっちを使うべきなんでしょうか。。
#system経由でなく直接外部コマンドを呼び出す方法とかないんですかね。
#Haskellのcurlライブラリはffiを使ってますね。。。
#つまり、system(3)ではなくfork(2)/exec(2)経由で呼ぶってことですが
#xmonadのspawnってあったような。。
#System.Cmd.rawSystemとかSystem.Process.procが使えます。 > shellを経由しないコマンド実行
#みてみます。ありがとうございます。
#xmlhtmlのutf8問題は追える気力が... #orz
#rawSystemも化けるようなきがしています。不完全なコードをちょっとはってみます。
##ところでどう化けているか、については何かわかりますか? 例えばutf-8がlatin-1と解釈されているようだ、とか。
##ああ、そういえば、GHC 7.0.x までの system 関数は locale encoding に対応できてませんね。 http://t.co/fZEy6sch ##GetAllPagePan_rawsystem.logこっちが化けてます。
#GHC を 7.2.2 や 7.4.1 RC 1 にアップグレードするか、utf8-string の encodeString 関数で変換した文字列を渡してやってください。
#をを!pandocを使ったケースではなんかこれっぽいですね!ちょっとやってみます。
#rawSystem' cmd = rawSystem cmd . map encodeString これを使えばOKでした。とりあえずxmlhtmlはおいといて、rawSystem+Pandocでスクリプトを作ろうと思います。ありがとうございました。 (でいいのかな。。。)
#あら解決したみたいで何より。ログ見た感じでは、ucs-4かutf-16になってから一番下のバイトだけ抜き出されてる感じですね。
#よくすぐわかりますね。。。
#htmlファイルをちょっといいかげんに解析するときはみなさんどんなライブラリを使われているのでしょうか。xmlhtmlはもう古いのでしょうか??
#http://nokogiri.org/ このなののHaskell版ってなにになるのかなと。。。 #いちおう結果報告で https://gist.github.com/1564930 このスクリプトでcurlでwilikiからページを取得できるようになりました。ありがとうございました。 ##む、それならwilikiのデータベースから直接生データをエクスポートしてフォーマット変換をかけるという手もあったかも、と思わなくもないけどマークアップ形式が大きく違うならhtml経由の方がいいのかな…
#えっと、生データをデータベースファイルから出す方法があればもっと助かります!最後にはmarkdownにしなきゃいけないんですが、それまでの道程が長いです。。。wiliki文法のファイルリストがヒストリなしで得られれば、後はpandoc reader書くだけなので楽ですー
#nobsunさんいらっしゃるかしら。。。 < sanpouのwilikiデータベース
#@nobsun QT : masterq: nobsunさんいらっしゃるかしら。。。 < sanpouのwilikiデータベース http://t.co/PMkikOWt #でもなんかよくかんがえてみたら、pandocにhtml readerがあるので、とりあえずwilikiのページをかたっぱしからhtml=>markdown変換しちゃってみます
#あら……twitter で呼びかける意味は特にありませんでしたか。
#ごめんなさい。。。
##pandocは特にpatchを書く必要のないほど偉大だったということで。。。
#あとはWikiNameのリンクがsampouを向いてしまうことだけ小細工すれば良さそうです。。
#あと、pandoc を使って HTML から Markdown に持って行くなら、(多少手間がかかりますが)このあたりの消失したページを Internet Archive から復旧させることもできそうですね。
##むむ。検討します。。。というかたぶん一旦サルベージした後で連絡をいただければ挑戦してみます。まずはwilikiのAllボタンから辿れるページを引っ越ししたく。。
#はい、分かりました。