• Publicidad

Subir fichero XML al servidor

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Subir fichero XML al servidor

Notapor reivaj63 » 2014-02-28 13:34 @607

Tengo un problema muy gordo.

Intento subir un fichero bien construido xml al servidor y cuando está en el servidor no es igual. Pasa con los acentos y otros caracteres especiales. Luego el cgi lee el fichero que se ha subido al servidor y mete los datos en BBDD. Sé que el problema está en la subida al servidor porque si copio el fichero original todo funciona bien.

Para subir el fichero utilizo lo siguiente:

sub crea_fichero(){
my $fichero_origen=$_[0];
my $fichero_destino=$_[1];

my $error=0;
my $buffer;
my $bytes=0;
my $length=0;

if (open(OUTFILE,">$fichero_destino") || die "No se puede abrir el archivo en crear_fichero\n"){
binmode(OUTFILE);
while ($bytes=read($fichero_origen,$buffer,1024)) {
print OUTFILE $buffer;
$length += $bytes;
}close(OUTFILE);
$error=0;
}else{
$error=-1;
}
}

Me gustaría que alguien me pudiera ayudar. Gracias por todo.

javier
reivaj63
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2014-02-28 13:25 @600

Publicidad

Re: Subir fichero XML al servidor

Notapor explorer » 2014-02-28 16:05 @711

Bienvenido a los foros de Perl en Español, reivaj63.

Lo primero que tenemos que saber es:
  • el archivo xml, en qué están codificados los caracteres. ¿utf-8, iso-8859-1, iso-8859-15...?
  • dices que lo subes a un servidor, pero no nos dices qué tipo de servidor. Supongamos que es HTTP, así que estás mostrando los datos en una página HTML, así que ahora lo que necesitamos saber es en qué está codificada esa página HTML. ¿utf-8, iso-8859-1, iso-8859-15...?
Yo veo correcta la forma de subir el archivo, porque supongo que estás haciendo un upload o algo parecido (no nos dices cómo lo subes, o a qué te refieres cuando dices "lo copio"). Al usar el binmode(), estás recibiendo los datos tal cual están siendo emitidos.

Si te salen errores en las tildes y caracteres especiales, es un tema de codificación de caracteres.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Subir fichero XML al servidor

Notapor reivaj63 » 2014-03-01 06:31 @313

Primero por la rapidez en la respuesta. Tienes razón al decir que no te he dado muchos datos.

El archivo xml está codificado en utf8.
El servidor es un servidor http (Apache) configurado con iso8859-1 y los datos no los muestro por pantalla, los almaceno en base de datos. Y si todo ha funcionado bien saco en HTML un resumen de registros insertados y registros rechazados.

Efectivamente hago un upload para subir el archivo al servidor. Una vez subido leo el archivo con

$libros = XMLin($destino); (donde $destino tiene la ruta al fichero subido) y aquí me da el siguiente error:

mismatched tag at line 13, column 52, byte 4062 at /usr/local/lib64/perl5/XML/Parser.pm line 187\n

Y en fichero que se ha subido contiene:

<autor>Conference on Computability in Europe 8Ã<83>Â<83>Ã<82>Â<83>Ã<83>Â<82>Ã<82>Â<83>Ã<83>Â<83>Ã<82>Â<82>Ã<83>Â<82>Ã<82>Â<82>Ã<83>Â<83>Ã<82>Â<83>Ã<83>Â<82>Ã<82>Â<82>Ã<83>Â<83>Ã<82>Â<82>Ã<83>Â<82>Ã<82>ª 2012 Sofia, Bulgaria</autor>

Y en el fichero original hay:

<autor>Conference on Computability in Europe 8ª 2012 Sofia, Bulgaria</autor>

Por el contrario, si subo el fichero inicial por scp al servidor dejándolo en la ruta que toca y quito del cgi que suba el fichero, entonces funciona perfectamente.

Lo curioso es que NO pasa con todos los caracteres especiales, en el fichero subido hay palabras con acentos que las ha subido bien y otras las sube como:

<autor>Palma Méndez, José Tomás</autor><edicion>Madrid [etc.] : McGraw-Hill/Interamericana de EspaÃ<83>±a, cop. 2008.</edicion>

Y en fichero original está como:

<autor>Palma Méndez, José Tomás</autor><edicion>Madrid [etc.] : McGraw-Hill/Interamericana de España, cop. 2008.</edicion>

Espero haberte dado toda la información.

Quedo a la espera de alguna sugerencia.

Un saludo.
reivaj63
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2014-02-28 13:25 @600

Re: Subir fichero XML al servidor

Notapor explorer » 2014-03-01 10:49 @492

Viendo el primer código que has presentado, hemos de suponer que $fichero_origen contiene un gestor de archivos al archivo que estás recibiendo por upload. Lo digo por que luego lo usas con la función read().

Bueno, para asegurarnos que la copia es literal, justo antes (o después) de la línea

binmode(OUTFILE);

agregas esta otra:

binmode($fichero_origen);

y entonces sí que la copia es literal. Debería ser literal de todas maneras, pero como no vemos más código, pues no sabemos si $fichero_origen ha sido abierto con alguna capa de E/S que haga transliteración de los caracteres.

No nos dices si estás usando el módulo CGI, pero, por si acaso, te enlazo con un mensaje donde se comenta el proceso general de uso del upload con ese módulo.

Si no lo consigues resolver, intenta publicar aquí el programa más pequeño que realice la subida de archivos siguiendo tu método, para que nosotros podamos reproducirlo, y ver dónde está el fallo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Subir fichero XML al servidor

Notapor reivaj63 » 2014-03-01 16:00 @708

Hola, explorer.

Gracias por la atención prestada. Por si a alguien le puede servir, al final el problema se ha resuelto cambiando la codificación en el Apache. Estaba en iso-8859-1 y al cambiarla a utf-8 todo ha funcionado.

Espero no tener ahora ningún problema con todo lo que tenía hecho.

Un saludo a todos.
reivaj63
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2014-02-28 13:25 @600

Re: Subir fichero XML al servidor

Notapor explorer » 2014-03-01 23:38 @027

La codificación del Apache es la que por defecto usa el navegador si, en el código HTML, no se indica ninguna (en la cabecera del HTML).

Así que, efectivamente: esa es otra posibilidad de fallo: al no indicar ninguna codificación en la página que hace la subida, el Apache usa la codificación por defecto que tenga definida.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 8 invitados