2011-11-13 10 views
5

Ho un file di testo con la codifica UTF-8, e creare un'applicazione in Delphi 2009 con un opendialoge, un promemoria e un pulsante e scrivere questo codice:leggere dal file di testo in Delphi 2009

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

Quando ho Esegui la mia applicazione, faccio clic sul pulsante e seleziono il mio file di testo, nel memo vedo:

"Œ ط ط ط ط ظ ..." ² ط ع ع © â " چط§ظط ± ط²غ Œâ: ط: "

i caratteri non sono stati visualizzati correttamente. Come posso risolvere questo problema?

risposta

12

Se il file non dispone di un BOM UTF-8, all'inizio, allora avete bisogno di dire LoadFromFile() che il file è codificato, ad esempio:

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

E 'possibile selezionare un formato di codifica nel OpenTextFile Dialog. OpenTextFileDialog.Encodings rappresenta un elenco di codifiche che è possibile utilizzare, elenco predefinito: ANSI, ASCII, Unicode, BigEndian, UTF8 e 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

Sono curioso di sapere questo. Non sono sicuro di quello che sta facendo il codice. Di cosa tratta l'oggetto Encodings? Potresti approfondire questo argomento con qualche testo in più e annotazioni per favore. –

+0

David, ho aggiornato la mia risposta –

+0

+1 Non ero a conoscenza di questo controllo. Ho ragione che la finestra di dialogo include un elenco a discesa che consente all'utente di specificare la codifica? Immagino che questo è più comunemente visto quando si salva un file (ad esempio il modo in cui Blocco note). Questo controllo usa finestre di dialogo di stile di nuovo stile o ricade nelle finestre di dialogo legacy di XP? –

Problemi correlati