Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Error acentos eñes codificación caracteres Delphi y C#
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Error acentos eñes codificación caracteres Delphi y C#

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: Error acentos eñes codificación caracteres Delphi y C# Responder citando

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);
MensajePublicado:
Lun Oct 07, 2013 4:55 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Error acentos eñes codificación caracteres Delphi y C# Responder citando



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");

  ....

  ficheroINI.Flush();
  ficheroINI.Close();
  ficheroINI  = null;
MensajePublicado:
Lun Oct 07, 2013 6:42 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
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A