以前も Ruby 1.9 の文字コード周りはEncoding::CompatibilityError にハマったり、Encoding::UndefinedConversionError にハマったりしましたが、今日はinvalid byte sequence in Windows-31J というエラーにどっぷりとハマってしまいました。コードは極簡単な TSV を読み取って表示するだけのもの。
hoge.rb
これを実行するとこんな感じになってしまいます。
これは Encoding.default_external と実際の文字コードがずれているために発生するようなので、起動時に -E オプションで文字コードを指定してやるか、
もしくは下記のように Encoding.default_external の値をファイル内の文字コードと合わせてやればいいようです。
File.open() を使う場合には、File.open('hoge.txt', 'r:utf-8') という感じで、モード設定のところに文字コードが指定できます。
今回は -E でオプションを設定してみたところ、うまくいきました。
† 参考
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5698
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。