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
したがって、バイトコードを正しく取得するという教訓があります。
しかし、それでも文字をそのまま入れられない理由は説明できません。