はじめに
先日Railsで遊んでいたところ表題のエラーに遭遇しました。
エラー自体はRailsというかRubyです。
ググっても解決できなかったので、原因と対処だけメモります。
原因となったコード
API使って情報を取得してくる部分です。
1 2 3 4 5 6 7 8 9 10 11 |
begin https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true response_json = https.get uri.request_uri puts response_json.body return JSON.parse(response_json.body) rescue => error puts "取得に失敗しました。" puts error.message return 9 end |
開発環境から本番環境にデプロイしてテストしたところ、”\xE8″ from ASCII-8BIT to UTF-8と出てしまいrescueされてしまいました。
対処
文字コード関連であるので、環境変数変更してみたり文字コード変換してみたりしましたが、解決せず、、、
結局デバッグ用に取得結果をputsしていた箇所でのみ発生していたため、puts行を削除によって解決。(元々不要ということもあり、、、)
ちなみに、開発環境ではななぜエラーにならなかったんでしょうね(developmentモードだったから?OSやらLANGが違うから?)
おまけ
調べたところ文字コード関連は文字列に下記をつければ解決らしいです。
1 |
String.force_encoding("UTF-8") |
もしくは、マジックコメントに記載する方法もあるようです。
1 2 |
#!/usr/local/bin/ruby # -*- coding: utf-8 -*- |
うちの環境では解決しませんでしたが、、、、