Problemas con ñ y EBCDIC (Convert::IBM390)
Publicado: 2012-03-28 14:30 @645
Estimados:
Tengo un problema con Perl y las "ñ"... El tema es así...
A través de un perl genero un spool y lo paso a EBCDIC con la librería "Convert::IBM390". El tema es que cuando abro los archivos con un editor de texto (ultraedit) las 'ñ' me figuran con "?".
Pasé los archivos en modo binario. Además, cuando me conecto desde sqlplus a Unix pasa lo siguiente:
(le quité algunos datos posiblemente sensibles por mi trabajo )
Por lo que pueden ver, parece ser un problema de las variables de entorno de Unix... El tema es que de Unix dicen que está todo bien configurado... Además, me genera bien el archivo si genero el mismo sin pasarlo a ebcdic (previo seteo del nls_lang), pero cuando lo paso a ebcdic con la librería y después lo paso a ascii nuevamente con el ultraedit, me aparece el carácter "#".
Trabajo con Unix y tiene las siguientes variables seteadas:
locale:
LANG=en_US
LC_COLLATE="en_US"
LC_CTYPE="en_US"
LC_MONETARY="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_MESSAGES="en_US"
LC_ALL=
export(las que creo que son importantes)
LANG="en_US"
SHELL="/usr/bin/ksh"
Además en el perl que genera el archivo tengo lo siguiente:
use POSIX qw/ strftime/; #permite usar strftime para tomar la fecha
use Convert::IBM390 qw(:all); #permite hacer la compresión
# Se setea el codepage requerido de EBCDIC
set_codepage('CP00284');
(entre otras cosas)
y la función que "comento" para que codifique en ebcdic o no es la siguiente:
open(ARCHIVO_SALIDA,">".$nombreArchivo)
or die("No se pudo crear el archivo: ".$nombreArchivo);
binmode ARCHIVO_SALIDA;
#Contador de registros escritos
my $cantidadRegistrosEscritos = 0;
while (my @array = $sth->fetchrow_array()) {
@array=packeb($formatoRegistro, @array);
print ARCHIVO_SALIDA @array; #imprimimos un array
if ($flagSeparador eq "SI") {
print ARCHIVO_SALIDA "\n"; #un separador de nueva línea
}
$cantRegistrosEcritos++;
}
close(ARCHIVO_SALIDA);
Intenté hacer lo que dice en este hilo, pero no resultó... Me dice que no puedo setear "locale". No sé por qué...
¡Ayuda! Estoy desesperado ya... y encima no sé nada de Perl...
Gracias de antemano...
Tengo un problema con Perl y las "ñ"... El tema es así...
A través de un perl genero un spool y lo paso a EBCDIC con la librería "Convert::IBM390". El tema es que cuando abro los archivos con un editor de texto (ultraedit) las 'ñ' me figuran con "?".
Pasé los archivos en modo binario. Además, cuando me conecto desde sqlplus a Unix pasa lo siguiente:
(le quité algunos datos posiblemente sensibles por mi trabajo )
Por lo que pueden ver, parece ser un problema de las variables de entorno de Unix... El tema es que de Unix dicen que está todo bien configurado... Además, me genera bien el archivo si genero el mismo sin pasarlo a ebcdic (previo seteo del nls_lang), pero cuando lo paso a ebcdic con la librería y después lo paso a ascii nuevamente con el ultraedit, me aparece el carácter "#".
Trabajo con Unix y tiene las siguientes variables seteadas:
locale:
LANG=en_US
LC_COLLATE="en_US"
LC_CTYPE="en_US"
LC_MONETARY="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_MESSAGES="en_US"
LC_ALL=
export(las que creo que son importantes)
LANG="en_US"
SHELL="/usr/bin/ksh"
Además en el perl que genera el archivo tengo lo siguiente:
use POSIX qw/ strftime/; #permite usar strftime para tomar la fecha
use Convert::IBM390 qw(:all); #permite hacer la compresión
# Se setea el codepage requerido de EBCDIC
set_codepage('CP00284');
(entre otras cosas)
y la función que "comento" para que codifique en ebcdic o no es la siguiente:
open(ARCHIVO_SALIDA,">".$nombreArchivo)
or die("No se pudo crear el archivo: ".$nombreArchivo);
binmode ARCHIVO_SALIDA;
#Contador de registros escritos
my $cantidadRegistrosEscritos = 0;
while (my @array = $sth->fetchrow_array()) {
@array=packeb($formatoRegistro, @array);
print ARCHIVO_SALIDA @array; #imprimimos un array
if ($flagSeparador eq "SI") {
print ARCHIVO_SALIDA "\n"; #un separador de nueva línea
}
$cantRegistrosEcritos++;
}
close(ARCHIVO_SALIDA);
Intenté hacer lo que dice en este hilo, pero no resultó... Me dice que no puedo setear "locale". No sé por qué...
¡Ayuda! Estoy desesperado ya... y encima no sé nada de Perl...
Gracias de antemano...