2016-01-29

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 読むとあーなるほどと思うことしきり。(奥が深い症候群か)

About

例によって個人のなんちゃらです