Utilizamos cookies propias y de terceros. Al navegar entendemos que aceptas el uso de cookies. +Info.
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Usuario
· Wiki

Nick


Contraseña


Nuevo usuario


English
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Problema con eñes y tildes en fichero con StringLists Delphi
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Problema con eñes y tildes en fichero con StringLists Delphi

Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Problema con eñes y tildes en fichero con StringLists Delphi Responder citando

Estoy desarrollando una aplicación de facturación y contabilidad. Una parte la hago en Microsoft Visual C# y otra en Delphi. Desde CSharp creo un fichero de texto plano sin formato donde guardo un texto, desde Delphi leo ese texto. El caso es que si pongo acentos o eñes en el texto, con el notepad se abre bien pero al abrirlo desde delphi las eñes y los acentos no aparecen bien.

El código que uso para leer el fichero desde Delphi es:

Código:

var
  nombreFicheroCP, resultadoCP : string;
  ficheroResultadoCP : TStringList;
begin 
  nombreFicheroCP :=
      IncludeTrailingPathDelimiter (ExtractFilePath(Application.ExeName)) +
      IncludeTrailingPathDelimiter ('Facturas')
      + 'factura_' + parametro1 + '.inc';
  if FileExists(nombreFicheroCP) then
  begin
    ficheroResultadoCP := TStringList.Create;
    ficheroResultadoCP.LoadFromFile(nombreFicheroCP);
    if ficheroResultadoCP.Count > 0 then
    begin
      resultadoCP := ficheroResultadoCP.Strings[0];
      if resultadoCP = 'Inserción correcta' then
      begin
        insertarLogFactura(vtCodigoUsuario, 'Inserción factura', now);
        ttabla.Edit;
        tTabla.FieldByName('insertada').AsString := 'S';
      end;
    end;
  end;


El código que uso para Visual C# para crear el fichero es:

Código:

  private void escribirFichero (string texto)
  {
    //obtenemos la carpeta y ejecutable de nuestra aplicación
    string rutaFichero = Environment.GetCommandLineArgs()[0];
    //obtenemos sólo la carpeta (quitamos el ejecutable)
    string carpeta = Path.GetDirectoryName(rutaFichero);
    carpeta = Path.Combine(carpeta, "Facturas");
    //Montamos la carpeta y el fichero temporal con el
    //primer parámetro que es el código de solicitud
    rutaFichero = Path.Combine(carpeta, "factura_" +
                codigoFactura + ".inc");
    try
    {
      //si no existe la carpeta temporal la creamos
      if (!(Directory.Exists(carpeta)))
      {
        Directory.CreateDirectory(carpeta);
      }
      if (Directory.Exists(carpeta))
     {
       //Creamos el fichero temporal y
       //añadimos el texto pasado como parámetro
       System.IO.StreamWriter ficheroTemporal =
           new System.IO.StreamWriter(rutaFichero);
       ficheroTemporal.WriteLine(texto);
       ficheroTemporal.Close();
     }
   }
   catch (Exception errorC)
   {
      MessageBox.Show("Ha habido un error al intentar " +
          "crear el fichero temporal:" +
          Environment.NewLine + Environment.NewLine +
          rutaFichero + Environment.NewLine +
          Environment.NewLine + errorC.Message,
          "Error al crear fichero temporal",
          MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }
  }
MensajePublicado:
Mie Feb 15, 2012 6:05 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Problema con eñes y tildes en fichero con StringLists De Responder citando



Anuncios



varios escribió:
Estoy desarrollando una aplicación de facturación y contabilidad. Una parte la hago en Microsoft Visual C# y otra en Delphi. Desde CSharp creo un fichero de texto plano sin formato donde guardo un texto, desde Delphi leo ese texto. El caso es que si pongo acentos o eñes en el texto, con el notepad se abre bien pero al abrirlo desde delphi las eñes y los acentos no aparecen bien.


El problema lo tienes en la codificación, en CSharp, si no le indicas lo contrario, codifica en UTF8 mientras que Delphi lo hace en ASCII. Por lo tanto, estás guardando el texto codificado en UTF8 y leyéndolo en ASCII.

La solución es muy sencilla, o bien desde Visual C# lo guardas codificado en ASCII o bien en Delphi decodificas el UTF8 de C#. Te cambiamos el ejemplo que nos has mostrado de Delphi para que lea en UTF8:

Código:

var
  nombreFicheroCP, resultadoCP : string;
  ficheroResultadoCP : TStringList;
begin
  nombreFicheroCP :=
      IncludeTrailingPathDelimiter (ExtractFilePath(Application.ExeName)) +
      IncludeTrailingPathDelimiter ('Facturas')
      + 'factura_' + parametro1 + '.inc';
  if FileExists(nombreFicheroCP) then
  begin
    ficheroResultadoCP := TStringList.Create;
    ficheroResultadoCP.LoadFromFile(nombreFicheroCP);
    if ficheroResultadoCP.Count > 0 then
    begin
      resultadoCP := UTF8Decode(ficheroResultadoCP.Strings[0]);
      if resultadoCP = 'Inserción correcta' then
      begin
        insertarLogFactura(vtCodigoUsuario, 'Inserción factura', now);
        ttabla.Edit;
        tTabla.FieldByName('insertada').AsString := 'S';
      end;
    end;
  end;


Si te fijas, lo único que hemos hecho ha sido añadir UTF8Decode a la línea donde lees el texto del fichero creado con C Sharp:

resultadoCP := UTF8Decode(ficheroResultadoCP.Strings[0]);
MensajePublicado:
Mie Feb 15, 2012 6:33 am
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Este sitio web NO CONTIENE malware, todos los programas con código fuente aquí. Autor: Alonso Javier Pérez Díaz Google+ Síguenos en Google+