Asunto: Problema con eñes y tildes en fichero con StringLists Delphi
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);
}
}
Publicado:
Mie Feb 15, 2012 6:05 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Problema con eñes y tildes en fichero con StringLists De
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:
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
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A