2010-12-11 5 views
0

ルビで文字列をチェックする方法は、actural文字列または画像などのブロブデータです。ビューのデータ型からルビ文字列、しかし、実際には内容が非常に異なっています.1つはリテラル文字列なので、もう1つはimageなどのblobデータです。ルビ文字列をチェックする方法は、actural文字列または画像などのブロブデータです

誰かが私に手がかりを与えることはできますか?前もって感謝します。

答えて

2

バイトはバイトです。ファイルデータではないことを宣言する方法はありません。印刷可能なASCIIだけからなる多くの形式で有効なファイルを作成するのはかなり簡単です。特にUnicodeを扱う場合、あなたは非常に暗い領域にいます。可能であれば、私は2つのパラメータを取るようにメソッドを修正することをお勧めします...バイナリデータのためのテキストともう一方を渡すために1つを使用します。

文字列の長さを調べることが1つあります。ほとんどの画像フォーマットは、小さな画像でも少なくとも500〜600バイトですが、これは決して正確なテストではありませんが、たとえば20k文字列を渡すと、おそらく画像になります。それがテキストの場合、かなりのビット(典型的な小説の四分の一のように)

+0

私はあなたに同意し、私は最初の選択肢を選んだ、と思うかもしれない。どうもありがとうございました。 – ywenbo

1

イメージやサウンドファイルのようなファイルには、スニッフィングできるブロックが定義されています。 Wotsit.orgには、ファイルが何であるかを決定するキーのバイトと方法についての多くの情報があります。データ内のバイトオフセットを調べることで、それを把握することができます。

もう1つの方法は、ファイル内のキー・バイトまたはバイト・タイプをスニッフしてそのタイプが何であるかを調べるコードである「マジック」を使用することです。 * nixシステムにはfileコマンドで組み込まれています。詳細についてはman fileまたはman magicを実行するか、またはMagic numbers in filesに関するWikipediaの記事を確認してください。

Ruby Filemagicは同じ手法を使用しますが、GNUのlibmagicに基づいています。

+0

リンクが私の意図に適していないようです。私の文脈では、ルビメソッドがあり、それは1つのパラメータ文字列を受け取ります。おそらくリテラル文字列です。多分イメージのBLOB文字列なので、別の操作を行うためには文字列の異なる内容に従う必要があります。実際には、rubyにBlob型がある場合は、私の問題を解決するかもしれないと思うかもしれませんが、見つけられません。 – ywenbo

0

文字列を構成するものは何ですか?あなたはシンプルなASCIIを期待していますか? UTF-8?またはテキストが他の方法でエンコードされていますか?

ASCIIテキストまたはBLOBを取得することがわかっている場合は、最初のnバイトをスピンさせ、8ビットが設定されているかどうかを確認してください。バイナリがあることがわかります。 OTOH、何も見つけられなかったとしても、あなたにはテキストがあることが保証されません。

UTF-8 Unicodeを取得する場合は、同じことをしますが、無効なUTF-8シーケンスを探します。もちろん、同じ警告が適用されます。

最初のnバイトをスキャンして、0x00と0x20の間のものをスキャンできます。あなたが低いバイトを見つけたら、ある種のバイナリBLOBを持っているでしょう。しかし、そうでないかもしれない。

Tyler Eavesが言ったように、バイトはバイトです。あなたはたくさんのバイトから始め、意味のある解釈を見つけようとしています。

あなたの最良の賭けは、呼び出し側が予想される解釈を提供するか、Gregのアドバイスを受けて、魔法の番号ライブラリを使用することです。

+0

ありがとう、最後にもう1つのパラメータを追加して区別しました。とにかくありがとう。 – ywenbo

関連する問題