プロが教える店舗&オフィスのセキュリティ対策術

content="text/html; charset=shift-jis"のページを読み込んで、文字列の置換がしたいです。

#!/opt/local/bin/ruby
require 'uri'
require 'open-uri'

url='http://hoge.hoge'

open(url,'r:shift_jis'){|io|
content = io.read
content.gsub!(/ほげ/,'ホゲホゲ)
print content
}
上記の様に書いてみました。ソースコード自体はUTF-8で記述しました。
実行すると、
`gsub!': incompatible encoding regexp match (UTF-8 regexp with Shift_JIS string) (Encoding::CompatibilityError)
となってしまいます。

どうしたらよいのでしょうか?
rubyのバージョンは
ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-darwin12]
です。

以上、よろしくご指導のほど、お願い申し上げます。

A 回答 (1件)

こんにちは



> `gsub!': incompatible encoding regexp match (UTF-8 regexp with Shift_JIS string) (Encoding::CompatibilityError)

contentの文字はShift_JISなのに、gsubの引数はUTF-8なので一致していないというエラーです。なので、一致させてあげましょう。

content = io.read.encode('utf-8') # contentの文字エンコードをUTF-8に変換
    • good
    • 0
この回答へのお礼

siffon9さん、ありがとうございました。
おかげさまでできました。

置換の後に出力結果はShift_JISのままにしたかったので、gsub!した後に、content.encode('Shift_JIS')で元に戻しました。

お礼日時:2014/12/09 18:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!