2012-02-02 16 views
2

指定したファイルのエンコーディングを取得:デルファイ - 私は後に、私が何であったか私を与えるだろうと思ったこの質問読んだことがある

How Can I Best Guess the Encoding when the BOM (Byte Order Mark) is Missing?

は、私は、ファイルを取得するための別の方法があるかどうかを知りたいとD2006でMozillaのi18nコンポーネントを使用せずに、他の3Dパーティコンポーネントは使用できません。

私は元の質問からすべての回答を読んでいる、と私は、クライアントがそのDLLの展開を受け入れていないため、提供されたインタフェースを使用することはできません。

元の質問に提供されたリンクの一部が死んでいる、とどれも私の問題に対処していない、である:
はどのようにサードパーティ製のコンポーネントを使用せずに、ファイルのエンコーディングを取得するには?

+3

@RobKennedy - それは重複していません。私は疑問に言及しました、私はすでにそれを読んでいます。言及された質問に対する答えは、この問題を解決せずにこれを試してみることです。質問した人は、ここで提供されているインターフェイスを使用して問題を解決していました。http://sourceforge.net/projects/chsdet/files/ – RBA

+2

BOMを探します。 BOMが見つからない場合は、エンコーディングの設定をユーザーに依頼します。 – kludg

+4

その質問に対する回答に満足できない場合でも、依頼しているのと同じ質問ではありません。その質問は、ファイルのエンコーディングを推測する方法を尋ねました。あなたは同じことを求めています。受け入れられた答えはChardetを使用することですが、メモ帳のアルゴリズムを使用するように指示するものをはじめ、他のアルゴリズムの説明が続きます。ライブラリを使用しないで、組み込みのAPIが気に入らない場合は、アルゴリズムの説明のみを取得します。あなたの質問は元のものとどう違うのですか? –

答えて

4

まずBOMを探し、見つからなければIsTextUnicodeを呼び出します。しかし、方法は絶対確実ではないことに注意してください。

+3

'IsTextUnicode'には注意が必要です。 [this](http://en.wikipedia.org/wiki/Bush_hid_the_facts)を参照してください。 – kobik

+2

@kobik従って私の最終的な文章。これは不正確な科学です。 –

+0

+1。 – RBA

1

ファイルのエンコーディングを決定するのは問題があるようです。 UTF8ファイルの中にはBOMがないものがあります。これは正常に動作するように見えます。

InputData.LoadFromFile(f,TEncoding.UTF8); 
if InputData.count=0 then 
    InputData.LoadFromFile(f); 

良いアプローチがありますか?私はこの解決策が非常に優雅ではないことを知っている。

+0

'LoadFromFile()'を呼び出す前に 'TEncoding.GetBufferEncoding()'を使うか、単にEncodingパラメータを省略し、 'LoadFromFile()'が内部的に 'GetBufferEncoding()'を呼び出させるようにしてください。 –

関連する問題