Sun Jul 21 16:01:36 JST 2013 (modified: Fri Sep 29 21:38:45 JST 2017)
views: 1175, keywords:プログラミング,Haskell,open,USP友の会,江頭 この記事は最終更新日が7年以上前のものです。
江頭問題の解決
以前、 http://www.usptomo.com/PAGE=20130326HSTARR で、「Haskellでopen usp Tukubaiのコマンドを作ったけど、ByteStringを使うと『江頭』という単語が文字化けする」とで騒いでいました。このときはStringを使う事で回避したのですが、入力データが大きくなるとやはり激烈に遅い。
この問題、words関数を自作したらあっさり解決しましたのでここに書いておきます。
まず、だめな例。
bsd /home/ueda$ cat egashira.hs
import System.Environment
import System.IO
import Data.ByteString.Lazy.Char8 as BS hiding (length,take,drop,filter,head)
main :: IO ()
main = BS.getContents >>= BS.putStrLn . BS.unwords . BS.words
bsd /home/ueda$ echo "栃木 江頭 江頭 栃木" | ./egashira
? ?木 江? ? 江? ? ? ?木
以下が小手先の修正。
bsd /home/ueda$ cat egashira.hs
import System.Environment
import System.IO
import Data.ByteString.Lazy.Char8 as BS hiding (length,take,drop,filter,head)
main :: IO ()
main = BS.getContents >>= BS.putStr . BS.unwords . egaWords
egaWords :: BS.ByteString -> [BS.ByteString]
egaWords str = split ' ' str
bsd /home/ueda$ echo "栃木 江頭 江頭 栃木" | ./egashira
栃木 江頭 江頭 栃木
うーん。open usp Tukubai についてはとりあえずこれでいいか・・・。Python版をHaskell版のコマンドに置き換える作業、やる気がでてきた。