- blogs:
- cles::blog
2013/03/31

invalid byte sequence in Windows-31J が出たときは


以前も Ruby 1.9 の文字コード周りは Encoding::CompatibilityError にハマったり、Encoding::UndefinedConversionError にハマったりしましたが、今日は invalid byte sequence in Windows-31J というエラーにどっぷりとハマってしまいました。コードは極簡単な TSV を読み取って表示するだけのもの。
hoge.rb
require 'csv'
CSV.foreach('hoge.txt', :headers => true, :col_sep=>"\t") do |row|
puts row
end
これを実行するとこんな感じになってしまいます。
C:\>jruby hoge.rb
ArgumentError: invalid byte sequence in Windows-31J
=~ at org/jruby/RubyRegexp.java:1487
=~ at org/jruby/RubyString.java:1715
init_separators at c:/jruby-1.7.3/lib/ruby/1.9/csv.rb:2058
initialize at c:/jruby-1.7.3/lib/ruby/1.9/csv.rb:1590
open at c:/jruby-1.7.3/lib/ruby/1.9/csv.rb:1349
foreach at c:/jruby-1.7.3/lib/ruby/1.9/csv.rb:1207
(root) at hoge.rb:3
これは Encoding.default_external と実際の文字コードがずれているために発生するようなので、起動時に -E オプションで文字コードを指定してやるか、
ruby -Eutf-8 hoge.rb
もしくは下記のように Encoding.default_external の値をファイル内の文字コードと合わせてやればいいようです。
Encoding.default_external = 'UTF-8'
File.open() を使う場合には、File.open('hoge.txt', 'r:utf-8') という感じで、モード設定のところに文字コードが指定できます。
今回は -E でオプションを設定してみたところ、うまくいきました。
C:\>jruby -Eutf-8 hoge.rb
ほげ,ふが
† 参考
- Windows環境でinvalid byte sequence in Windows-31Jになる場合(Ruby 1.9.2)ユニキャストラボ | ユニキャストラボ
- Ruby1.9をこれから使う人のためのM17Nまとめ - 仙台Rails牛タン社長
- Rubyのエンコーディング
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5698
Trackbacks
Vagrantでshellscriptによるprovisionをしようとしたらエラーが出ました。 [default] Running cleanup tasks for 'shell' provisioner... C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.4.2/plugins/provisioners/shell/provisioner.rb:88:in `gsub!': invalid byte sequence in Windows-31J (ArgumentError) from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.4.2/plugins/provisioners/shell/pro...
DQNEO起業日記 (2014/02/02 20:08)
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . Solr-rubyで複数のドキュメントを一括Post(32979)
2 . Windows 10 で勝手にログアウトされないようにする(31140)
3 . Word で数式がグレーアウトされていて挿入できないときは(26599)
4 . リモートデスクトップで Alt + PrtSc と同じことをするには(22068)
5 . Visual Studio 2017/2019 で scanf() がエラー(C4996)になるときは(21371)
2 . Windows 10 で勝手にログアウトされないようにする(31140)
3 . Word で数式がグレーアウトされていて挿入できないときは(26599)
4 . リモートデスクトップで Alt + PrtSc と同じことをするには(22068)
5 . Visual Studio 2017/2019 で scanf() がエラー(C4996)になるときは(21371)
cles::blogについて
Referrers