2011-11-13 32 views
5

Tengo un archivo de texto con codificación UTF8, y crear una aplicación en Delphi 2009 con un opendialoge, una nota y un botón y escribir este código:Leer archivo de texto en Delphi 2009

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

Cuando ejecutar mi aplicación, hago clic en el botón y seleccionar mi archivo de texto, en el memo que veo:

"Œ ط¯ط ± ط ¢ ظ ... â € â € œ چظط²ط' ع © â € چط' â € چط§ظط ± ط²غ Œâ € Œ: ط ± "

los caracteres no se muestran correctamente. ¿Cómo puedo resolver este problema?

Respuesta

12

Si el archivo no tiene una lista de materiales UTF-8 al principio, entonces usted necesita para contar LoadFromFile() que el archivo está codificado, por ejemplo:

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

Es posible seleccionar un formato de codificación en el Diálogo OpenTextFile. OpenTextFileDialog.Encodings representa una lista de codificaciones que se pueden usar, lista predeterminada: ANSI, ASCII, Unicode, BigEndian, UTF8 y 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

Tengo curiosidad acerca de esto. No estoy seguro de lo que está haciendo el código. ¿De qué trata el objeto Encodings? ¿Podrían explicar esto con algún texto adicional y anotaciones? –

+0

David, he actualizado mi respuesta –

+0

+1 No tenía conocimiento de este control. ¿Tengo razón en que el diálogo incluye una lista desplegable que permite al usuario especificar la codificación? Supongo que esto se ve más comúnmente al guardar un archivo (por ejemplo, la forma en que lo hace Notepad). ¿Utiliza este control los diálogos de Vista de estilo nuevo o recurre a los diálogos de XP heredados? –

Cuestiones relacionadas