受信メールを解析しようとして、本文をUTF-8
エンコードされた文字列としてデータベースに保存したいのですが、すべてのメールがContent-Type
ヘッダーで文字セット情報を送信するわけではないことにすぐに気付きました。でいくつかの手動のクイックフィックスを試した後String.force_encoding
、String.encode
私はSOのフレンドリーな人々に尋ねることにしました。
正直なところString.encoding
、文字列で使用されているエンコーディングを自動的に返すことを密かに望んでいASCII-8BIT
ましたが、テストメールを送信した後は常に表示されます。私がいくつかの情報quoted-printable
も得ていればうまくいくように見えるオプションとして実装していたときに、この問題が発生し始めました。;charset=blabla
input = input.gsub(/\r\n/, "\n").unpack("M*").first
if( charset )
return input.force_encoding(charset).encode("utf-8")
end
# This is obviously wrong as the string is not always ISO-8859-1 encoded:
return input.force_encoding("ISO-8859-1").encode("utf-8")
私はインターネットで見つけたいくつかの「解決策」を試してきましたが、ほとんどはファイルの読み取り/書き込みに関連しているようで、エンコーディングを検出するためのいくつかの宝石を試しました(ただし、実際にはうまくいかなかったか、信じられないほど時代遅れでした) 。それは可能であるはずであり、答えが私を真正面から見つめているように感じます。うまくいけば、ここの誰かが私の状況に光を当て、私が完全に間違っていることを教えてくれるでしょう。
- ルビー1.9.3を使用