マグカップの裏

プログラムとか、思ったこととか、料理とか

Rubyでinvalid by te sequence in Windows-31J (ArgumentError)がでてはまった話

Rubyでも文字列をいじくる回す処理を書いていたところ
「'delete': invalid byte sequence in Windows-31J (ArgumentError)」というエラーが…。
二つのファイルを開いて書くファイルの一部の文字列を比較するようなことをしたく、余計な改行コードを消したくてdeleteしたのですが、なぜかうまくいかない。
各ファイルはShift-JISとUTF-8で、ファイルを読み込むときにはちゃんと指定してあげてkconvを使って文字コードの変換もしてあげてるのになぜかだめ。

ためしに下記を実行。

ruby -e "puts Encoding.default_external"
Windows-31J

スクリプトの先頭で#encoding:utf8とやってれば関係なさそうだけど、これが原因かなと下記をスクリプトに追加してあげた。

Encoding.default_external = "UTF-8"

外部エンコードを変えてます。なんかこれでうまくいった。