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系への変更による影響。
[ツッコミを入れる]