Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Providers (https://www.clubdelphi.com/foros/forumdisplay.php?f=10)
-   -   Errores en XmlTransformProvider (https://www.clubdelphi.com/foros/showthread.php?t=90546)

ElKurgan 07-07-2016 09:39:54

Errores en XmlTransformProvider
 
Saludos a todos

En el trabajo tenemos un curioso problema con los archivos XML cargados mediante un XmlTransform de Delphi XE7.

Somos varias personas trabajando con la misma versión de Delphi y en el mismo proyecto, pero para acotar el problema, supongamos que sólo hay dos, el ordenador "A" y el ordenador "B".

El programa es muy simple, sólo carga un XML a través de un archivo ".xtr" de transformación a un ClientDataset y se muestran los datos en un DBGrid.

Sin tocar el archivo XTR para nada, cuando compilamos el visor, dependiendo del ordenador, unas veces muestra los caracteres acentuados y las "ñ" correctamente y otras no. Se trata de un problema sólo al compilar, porque si se compila (por ejemplo) desde el ordenador A, el ordenador B ve en el ejecutable los caracteres acentuados. Sin embargo, si se compila desde el ordenador B ninguno ve los datos correctamente.

Lo gracioso es que todos tenemos la misma versión de Delphi (XE7), y la misma configuración regional de Windows (Windows 10).

¿A que puede deberse este problema?

Saludos

gatosoft 29-07-2016 17:02:34

¿Han revisado los archivos XML generados antes de cargarlos?.. evidentemente parece ser un problema con la codificación dle archivo generado.. uno de ellos debe ser generado con condificación ANSI y el otro con UTF8 (por ejemplo).

No he trabajado el componente que mencionas pero se que tiene una propiedad ENCODING, con la cual puedes controlar o forzar la codificación.

A mi me sucedia algo parecido importando y exportando archivos con un TStringList y lo resolví trabajando con ésta propiedad....

Espero que te sirva... igual nos cuentas

ElKurgan 14-06-2017 13:28:06

Bueno, perdón por el retraso en contestar, pero no he podido ponerme a ello antes.

Al final el error se produce por una cosa muy tonta:

En Delphi XE2, dentro de la función "StringToVariantArray" del archivo "Datasnap.xmlxform.pas" venía esta línea:

Código Delphi [-]
  Move(M.AsAnsi(S).ToPointer^, PByte(LArray)^, Len);
... Pero en la versión de Delphi XE7 viene así:

Código Delphi [-]
  Move(M.AsUtf8(S).ToPointer^, PByte(LArray)^, Len);
En fin, es posible que efectivamente el XML a parsear no sea un utf-8 válido, pero copiando el archivo pas dentro de los fuentes del proyecto y dejando la función anterior de esta forma funciona:

Código Delphi [-]
//  Move(M.AsUtf8(S).ToPointer^, PByte(LArray)^, Len);
  Move(M.AsAnsi(S).ToPointer^, PByte(LArray)^, Len);   // Apaño en XE7
En fin, gracias por todo, y espero que esta solución le sirva a alguien también.

El tema puede darse por cerrado

Saludos


La franja horaria es GMT +2. Ahora son las 09:21:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi