1

Rails 3.2.2
Ruby 1.9.3
試したすべてのブラウザー (Aurora、IE、Chrome)
Windows 7

データベースとクライアントの間で Unicode を確実にやり取りできることを楽しんでいます。私が言うことができる限り、それは完璧に機能します。

しかし、それは私がさらに厄介な問題を抱えているだけです。Rails 内でさまざまな特殊文字を含む文字列リテラルを使用すると (たとえば、モデル用に定義されたメソッド内で)、Webrick が完全に失敗し、500「申し訳ありませんが、何かが発生しました」というエラーが返されます。

たとえば、「O₂」という文字列があるとします。その値をフォームに投稿して、後で再度取得すると、すべてがうまくいきます。しかし、私には方法があると言います

def fix_name molecule_name 
  fixed_name = molecule_name
  case molecule_name
  when 'O2' then fixed_name = 'O₂'
  end
  return fixed_name
end

その後、fix_name を呼び出すと、ケースが一致せずに失敗した場合でも、サーバーは突然失敗します (汎用の new.html ページを正常にレンダリングしたと言った直後)。

さらに、次のように unicode を直接指定するように切り替えると、

def fix_name molecule_name 
  fixed_name = molecule_name
  case molecule_name
  when 'O2' then fixed_name = "O\x20\x82"
  end
  return fixed_name
end

「₂」ではなく、一般的な「�」文字が表示されます。

他の誰かがこの問題を抱えていますか? ここで何が起こっているのでしょうか?

更新しました

さて、Unicode と UTF-8 について自分自身をもう少しよく教育したことで、これについてネアンデルタール人であることが少し減りました。

私が投稿したコードの修正は次のいずれかです

def fix_name molecule_name 
  fixed_name = molecule_name
  case molecule_name
  when 'O2' then fixed_name = "O\xe2\x82\x82"
  end
  return fixed_name
end

またはおそらくより良い:

def fix_name molecule_name 
  fixed_name = molecule_name
  case molecule_name
  when 'O2' then fixed_name = "O\u{2082}"
  end
  return fixed_name
end

したがって、バイトコードを正しく取得するという教訓があります。

しかし、それでも文字をそのまま入れられない理由は説明できません。

4

1 に答える 1

1

Ruby 1.9.3 は、rb ファイルのエンコーディングに関して「厳密」です。

http://yehudakatz.com/2010/05/05/ruby-1-9-encodings-a-primer-and-the-solution-for-rails/

http://blog.grayproductions.net/articles/ruby_19s_three_default_encodings

簡単な答えは、追加してみてください:

# encoding: UTF-8

.rb ファイルの先頭に追加すると、ruby 1.9.3 はコード内の UTF 文字で詰まることがなくなります。

于 2012-05-04T01:50:04.580 に答える