WindowsのRubyでGitのcommitを扱おうとしてた
一言で言うと cmd.exe 上で動かすと外部コマンドからの入力を Windows-31J だと思い込んでしまうので .force_encoding('UTF-8') を足せという話だったっぽい。(実際には日本語の部分は捨てていたのでなんでもよかった。)
要はこんなやつです。
`git log -n 1 --oneline master`
こいつの結果を処理しようとしてたんだけど、OSX だとうまく動くのに、Windows だと
invalid byte sequence in Windows-31J
って言われちゃう。
Git の commit log って UTF-8 決め打ちじゃないんだっけ、と思いながら Windows の Ruby は Windows での利用に都合のいいように外の世界は Windows-31J で動いているのだという設定になってるんじゃないかな。
ということで
`git log -n 1 --oneline master`.force_encoding('UTF-8')
しておしまい。最終的には hash が手に入ればよかったので、調べたら
`git log -n 1 --pretty=%h master`
でもよかったかもしんない。git ってたまに help 読むとあーなるほどと思うことしきり。(奥が深い症候群か)