2010年11月30日 ruby-1.9.xのエンコーディング関係のエラー [長年日記]
_ invalid multibyte char (US-ASCII)
たとえばeuc-jpで記述されたスクリプトの日本語がらみの部分でこのエラーが出た場合は、スプリプトの先頭を
#! /usr/bin/ruby # -*- encoding: euc-jp -*-
のようにして、エンコーディングを指定する。
追記 : 上記のようにしてもダメなことがあった。`#! /usr/bin/ruby -Ke' と指定するとOKとなった。
_ incompatible character encodings: EUC-JP and ASCII-8BIT (Encoding::CompatibilityError)
たとえばeuc-jpで文字列が格納されているはずの変数strでこのエラーが出た場合は
str.force_encoding('euc-jp')
のようにしてエンコーディングを変更してやる。
実際には dbi, dbd-odbc辺りでこの現象が出た。以下のように対応した。
sql = <<SQL select * from member where id >= ? SQL sth = dbh.prepare(sql) sth.execute(1) while (row = sth.fetch) sth.column_names.each {|name| if (row[name].kind_of?(String)) row[name].force_encoding('euc-jp') end } puts "セレクトに成功しました(id=#{row['id']})(name=#{row['name']})(job=#{row['job']})" end sth.finish
いずれもruby-1.8系からruby-1.9系への変更による影響。