1

受信メールを解析しようとして、本文をUTF-8エンコードされた文字列としてデータベースに保存したいのですが、すべてのメールがContent-Typeヘッダーで文字セット情報を送信するわけではないことにすぐに気付きました。でいくつかの手動のクイックフィックスを試した後String.force_encodingString.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を使用
4

2 に答える 2

0

https://github.com/janx/chardetを使用して、電子メールテキストの発信元エンコーディングを検出できます。

ここでの例:

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'UniversalDetector'
=> false
irb(main):003:0> p UniversalDetector::chardet('hello')
{"encoding"=>"ascii", "confidence"=>1.0}
=> nil
于 2012-05-29T09:54:14.313 に答える
0

https://github.com/fac/cmessを試しましたか?

==説明

CMessは、文字セットとエンコーディングのコンテキストで発生するさまざまな問題に対処することを目的とした、その内部にいくつかのツールをバンドルしています。現在、次のものがあります。

guess_encoding:: 指定された文字列のエンコーディングを識別するための単純なヘルパー。入力のエンコーディングを自動的に検出する機能が含まれています。

[...]

于 2013-03-09T19:12:24.640 に答える