Asunto: Error acentos eñes codificación caracteres Delphi y C#
Hola, estoy desarrollando una aplicación en Delphi 6 y también en C# de Visual Studio .Net 2010 para obtener unos datos de Active Directory (LDAP), con C# he desarrollado el acceso al Active Directory, genero un fichero INI con los datos obtenidos y con Delphi leo ese fichero y muestro los datos. Obligatoriamente he de usar ambos lenguajes Delphi y C# pues en Delphi tengo la aplicación de Facturación, Contabilidad, Recursos Humanos y HelpDesk.
Todo me funciona bien salvo que cuando el fichero generado por C# contiene tildes, eñes y caracteres de este tipo, en Delphi no me aparecen correctamente ¿cómo puedo solucionar esto?
Os paso el código Delphi donde leo el fichero INI generado por C#:
Código:
uses inifiles,.....;
........
if FileExists(ficheroINI) then
DeleteFile(pchar(ficheroINI));
resultado := ejecutarComando('ad.exe -c -n ' +
tTabla.fieldbyname('dni').AsString + ' ' + '-g datos_ldap.ini');
valor := '';
if FileExists(ficheroINI) then
begin
with tinifile.create (ficheroINI) do
try
valor := ReadString ('Datos', 'Nombre para mostrar', '');
txtLDAPNombreMostrar.Text := valor;
valor := ReadString ('Datos', 'Nombre', '');
txtLDAPNombre.Text := valor;
valor := ReadString ('Datos', 'Iniciales', '');
txtLDAPIniciales.Text := valor;
valor := ReadString ('Datos', 'Apellidos', '');
txtLDAPApellidos.Text := valor;
valor := ReadString ('Datos', 'Descripción', '');
txtLDAPDescripcion.Text := valor;
valor := ReadString ('Datos', 'Número de teléfono', '');
txtLDAPTelefono.Text := valor;
valor := ReadString ('Datos', 'Nombre de inicio de sesión', '');
txtLDAPInicioSesion.Text := valor;
valor := ReadString ('Datos', 'Última modificación de contraseña', '');
txtLDAPUltimaModificacion.Text := valor;
valor := ReadString ('Datos', 'Fecha de caducidad contraseña', '');
txtLDAPCaducidad.Text := valor;
valor := ReadString ('Datos', '¿La contraseña caduca?', '');
opLDAPCaducada.Checked := valor = 'true';
finally
free;
end;
end
else
MessageDlg('Ha habido algún problema al conectar con el servidor ' +
'Active Directory LDAP o bien el usuario no existe:' + chr(13) + chr(13) +
valor, mtWarning, [mbok], 0);
Publicado:
Lun Oct 07, 2013 4:55 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Error acentos eñes codificación caracteres Delphi y C#
Anuncios
El problema sucede porque Delphi utiliza la codificación de caracteres ANSI por defecto mientras que C# utiliza UTF. Puesto que el fichero INI en C# lo generarás (suponemos) con la codificación UTF, desde Delphi lo lee pero no mostrará correctamente los caracteres específicos como las tildes, eñes y demás, puesto que emplea ANSI.
Para solucionar el problema tienes dos opciones:
1. Desde tu aplicación Delphi puedes leer el fichero INI y convertirlo a ANSI, o bien más sencillo aún, leer el fichero INI y convertirlo a ANSI con Utf8ToAnsi. Por ejemplo, en tu código Delphi:
Código:
with tinifile.create (ficheroINI) do
try
valor := Utf8ToAnsi(ReadString ('Datos', 'Nombre para mostrar', ''));
txtLDAPNombreMostrar.Text := valor;
valor := Utf8ToAnsi(ReadString ('Datos', 'Nombre', ''));
txtLDAPNombre.Text := valor;
.......
Debes tener la precaución de que si en alguna clave de tu fichero INI has puesto tildes o eñes o caracteres propios debes convertir (para que la lea bien) de ANSI a UTF, por ejemplo en la clave que usas "Descripción":
Código:
valor := Utf8ToAnsi(ReadString ('Datos', AnsiToUtf8 ('Descripción'), ''));
De esta forma conviertes el ANSI de Delphi a UTF de C# para que encuentre la clave del fichero INI (en UTF) y luego el valor obtenido lo conviertes a ANSI para mostrarlo en tu aplicación Delphi.
2. La otra posibilidad es generar en tu aplicación C# directamente el fichero en ANSI, sería algo así:
Código:
TextWriter ficheroINI = new StreamWriter(rutaFicheroINI, false, Encoding.GetEncoding(1252));
ficheroINI.WriteLine("xxx");
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