読む

2011-11-13 10 views
5

私はUTF8エンコーディングでテキストファイルを持っている、と私はopendialoge、メモボタンをデルファイ2009でアプリケーションを作成し、このコードを書く:読む

if OpenTextFileDialog1.Execute then 
    Memo1.Lines.LoadFromFile(OpenTextFileDialog1.FileName); 

ときI私のアプリケーションを実行し、私はボタンをクリックし、私の参照してくださいメモで私のテキストファイルを選択してください:

"Œ×××±¢ظ..."“X¢â€¢â€ "±

文字が正しく表示されませんでした。 この問題を解決するにはどうすればよいですか?

答えて

12

ファイルは、例えば、あなたは、ファイルがエンコードされていることLoadFromFile()を伝える必要があり、先頭にUTF-8 BOMを持っていない場合:

Memo1.Lines.LoadFromFile(OpenTextFileDialog1.FileName, TEncoding.UTF8); 
5

でエンコード形式を選択することが可能ですOpenTextFileダイアログ。 OpenTextFileDialog.Encodingsは、使用できるエンコーディングのリストを表し、デフォルトのリストはANSI、ASCII、Unicode、BigEndian、UTF8およびUTF7です。

// Optionally add Encoding formats to the list: 
FMyEncoding := TMyEncoding.Create; 
OpenTextFileDialog1.Encodings.AddObject('MyEncoding', FMyEncoding); 
// Don't forget to free FMyEncoding 


var 
    Encoding : TEncoding; 
    EncIndex : Integer; 
    Filename : String; 
begin 
    if OpenTextFileDialog1.Execute(Self.Handle) then 
    begin 
    Filename := OpenTextFileDialog1.FileName; 

    EncIndex := OpenTextFileDialog1.EncodingIndex; 
    Encoding := OpenTextFileDialog1.Encodings.Objects[EncIndex] as TEncoding; 
    // No Encoding found in Objects, probably a default Encoding: 
    if not Assigned(Encoding) then 
     Encoding := StandardEncodingFromName(OpenTextFileDialog1.Encodings[EncIndex]); 

    //Checking if the file exists 
    if FileExists(Filename) then 
     //Display the contents in a memo based on the selected encoding. 
     Memo1.Lines.LoadFromFile(FileName, Encoding) 
+0

私はこれについて興味があります。あなたのコードが何をしているのか分かりません。 Encodingsオブジェクトとは何ですか?余分なテキストと注釈をつけて、これを詳しく説明してください。 –

+0

David、私は自分の答えを更新しました –

+0

+1私はこのコントロールを知らなかった。ダイアログにドロップダウンリストが含まれているので、ユーザーはエンコードを指定できますか?これは、ファイルを保存するときによく見られると思います(たとえば、メモ帳など)。このコントロールは新しいスタイルのVistaダイアログを使用しますか、それとも従来のXPダイアログにフォールバックしますか? –