• Publicidad

Codificación de un archivo

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Codificación de un archivo

Notapor keparodo » 2012-05-03 12:26 @559

Hola,

¿Existe sentencia para saber cuál es la codificación de un archivo que estás leyendo? Cualquier tipo, cualquier extensión.

Gracias.
keparodo
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2011-12-14 17:17 @762

Publicidad

Re: Codificación de un archivo

Notapor explorer » 2012-05-03 13:18 @596

Es un asunto complicado, pues algunas codificaciones se solapan.

En CPAN tienes los módulos Encode::Guess y Encode::Detect.

Tienes un ejemplo y más explicación, aquí.
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: Codificación de un archivo

Notapor keparodo » 2012-05-15 18:23 @808

Aquí voy de nuevo...

Al parecer sí es complicado. No he podido dar aún con la solución, y por ende, aún tengo inconvenientes...

Quiero consultar algo:

Yo bajo los archivos desde un ftp:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $ftp_handle->binary();
  2. $ftp_handle->get("$remotefile[$cont]", $nombre_en_local);
  3.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Me podrías explicar cuál es el sentido del binary?

Los archivos que yo recojo del ftp, los depositan distintos clientes, por lo tanto la codificación de la escritura de esos archivos podría ser cualquiera y es ahí donde tengo conflictos para leerlos posteriormente.

Una vez tomado el archivo del ftp, lo trabajo en forma local, lo abro y cada uno es insertado a una base de datos Oracle.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(FILE, "<$file_name") or &escribe_log("Error al abrir archivo-->$file_name<--");
  2. while( defined($file_line = <FILE>) ){
  3.   $file_line = &trim($file_line);
  4.   $file_line = quita_acentos($file_line); # para quitar los acentos de la línea
  5.   $file_line = elimina_caracteres($file_line); # para quitar los acentos de la línea
  6.   if (&trim($file_line) ne ''){
  7.         $file_line =~ s/;/\;/g;
  8.         $file_line =~ s/  / /g;
  9.         &escribe_log( "                 -----linea generada -->$file_line<--");
  10.         $sql = "INSERT INTO $CFG{'schema'}.FILE_IMP (ID_REG, ID_ARCHIVO, TRAMA)
  11.               VALUES (SEQ_ID_REG.nextval, $file_corr,UPPER('$file_line'))";
  12.         my $sql_sqlh   = $dbh->prepare ($str_sql);
  13.        ( ! $sql_sqlh          ){ $ret_ins = 'fail'; escribe_log("       ERROR" ); }
  14.         if( ! $sql_sqlh->execute ){ $ret_ins = 'fail';escribe_log("Error a ejec INSERT"); }
  15.         if($ret_ins ne 'success'){
  16.                         $registros_error++;
  17.         }
  18.         else{
  19.                         $registros_insertados++;
  20.         }
  21.   }
  22. }
  23.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Cada línea pasa por las funciones "quita_acentos" y "elimina_caracteres" que hacen cambios como:
- á por a
- é por e, y todas las alternativas de acentos
- ñ por n
- eliminar caracteres como '#', '(', ')', ':', '[' y todo lo que no corresponda a letras; y ',', ';', '|' y tabulador, que puede ser el separador de la trama del archivo.

El problema, es que no siempre me realiza los cambios de los caracteres, porque me imagino, no los lee en la codificación del archivo y no los entiende.

Al grabarlos en mi base de datos los deja como estaban originalmente, pero al leer la línea, no los encuentra.

¿Muy complicado?

Por ejemplo, se me dan los siguientes casos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  - línea leída del archivo   ¿CONCÓN
  - línea generada            CONCON
  - Insertado:                CONCON
    LO QUE ESTÁ BIEN
 
  - línea leída del archivo   CONCÓN
  - línea generada            CONCON
  - Insertado:                ¿CONCON
    LO QUE ESTÁ MAL, pues la inserción adecuada debió ser CONCON
 
  - línea leída del archivo   MARÃ#A
  - línea generada            MARAA
  - Insertado:                MARAA
  LO QUE ESTÁ MAL, porque 'Ã#' era una 'Í', que no supe leer al inicio.
 
  - línea leída del archivo   GUI?EZ
  - línea generada            GUIEZ
  - Insertado:                GUIEZ
  LO QUE ESTÁ MAL, porque '?' era una 'Ñ'
 
  - línea leída del archivo   NU�EZ
  - línea generada            NUiEZ
  - Insertado:                NUIEZ
  LO QUE ESTÁ MAL, porque '�' era una 'Ñ'
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Por su ayuda,
muchas gracias.
keparodo
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2011-12-14 17:17 @762

Re: Codificación de un archivo

Notapor explorer » 2012-05-16 06:05 @295

keparodo escribiste:¿Me podrías explicar cuál es el sentido del binary?
Solicitamos que el modo de transferencia sea en binario.

keparodo escribiste:Los archivos que yo recojo del ftp, los depositan distintos clientes, por lo tanto la codificación de la escritura de esos archivos podría ser cualquiera y es ahí donde tengo conflictos para leerlos posteriormente.
¿Y no puedes preguntarles qué sistemas operativos están usando? Si sabes eso, ya tienes hecho casi todo el camino.

keparodo escribiste:Una vez tomado el archivo del ftp, lo trabajo en forma local, lo abro y cada uno es insertado a una base de datos Oracle.
¿En qué codificación está la base de datos?

keparodo escribiste:Cada línea pasa por las funciones "quita_acentos" y "elimina_caracteres"
¿Y, por qué? ¿No te gustan los caracteres tildados? ;)

En cuanto a las cosos que muestras. En el segundo caso, no tengo ni idea de dónde sale el carácter '¿'. Del tercero, sospecho que 'Ã#' es una codificación utf8. Del cuarto, sospecho que está en una codificación 'latin' (iso-8859). Y del último, la secuencia '�' corresponde a los valores 0xef, 0xbf y 0xbd, que según la codificación utf8 corresponde al carácter de reemplazo '�', indicando que el analizador de código utf8 no fue capaz de entender lo que leía (vamos, que equivale al '?' del cuarto caso, indicando que no sabemos a qué carácter corresponde).

Pues sí... es un tema muy complicado, si no tienes más pistas.

Encode::Guess parece que encaja mejor aquí, pero antes deberías saber el rango de codificaciones posibles.

A propósito, por si no lo has visto, mírate Orden de la letra Ñ.
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: Codificación de un archivo

Notapor keparodo » 2012-05-23 12:47 @574

De regreso al tema...

Respecto a tus respuestas y consultas:
Solicitamos que el modo de transferencia sea en binario.
Ok, lo entendí a la primera, mi pregunta era un poco más interna... ¿Se hace alguna transformación de lo que lee? ¿Se traduce a binario? No sería esta la oportunidad para que al ser transferido (o leído ¿?) en binario, yo lo pudiera entender en mi propia codificación (de mi equipo) y no tener los posteriores conflictos?

¿Y no puedes preguntarles qué sistemas operativos están usando? Si sabes eso, ya tienes hecho casi todo el camino.
No. No puedo mi cliente es uno, pero él atiende a por lo menos 350 clientes, cada cliente tiene una o más personas que envían sus archivos, desde distintas fuentes, equipos, etc. por lo que siquiera intentar saberlo es complicado.

¿En qué codificación está la base de datos?
LANG=en_US.UTF-8

Y supuestamente el servidor donde tengo la aplicación es LANG=AMERICAN_AMERICA.WE8ISO8859P15

Y, finalmente, me piden eliminar estos caracteres para que no sean almacenados de forma incorrecta, entiendo que eso se soluciona, al leer en la codificación correcta y al guardar en la codificación correcta, pero para hacerlo en esta última etapa, debo saber lo que leo y el problema es que es el origen el que desconozco.

Probé muchas formas, sin buenos resultados, pero seguramente me equivoqué... Se agradece la ayuda.
keparodo
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2011-12-14 17:17 @762

Re: Codificación de un archivo

Notapor explorer » 2012-05-23 15:37 @692

keparodo escribiste:¿Se hace alguna transformación de lo que lee?
Si no se hace en binario, FTP hace la transformación de los caracteres finales de línea, lo cual es genial si transmitimos ficheros de texto, pero un desastre si se trata de otro tipo de archivos. Por eso, la inmensa mayor parte de las ocasiones, todo se hace en binario.

Es una de esas cosas que quedan de la informática antigua... tenía sentido hace 20 años, pero ahora ya no.

keparodo escribiste:¿Se traduce a binario?
Los ordenadores solo entienden binario ;)

keparodo escribiste:No sería esta la oportunidad para que al ser transferido (o leído ¿?) en binario, yo lo pudiera entender en mi propia codificación (de mi equipo) y no tener los posteriores conflictos?
En algunos clientes FTP se puede configurar la codificación del servidor y del cliente, y se supone que hará la transformación de caracteres si la transmisión no es en binario.

Pero para transmisiones programadas, como la tuya, la respuesta es no. Mejor bájate el archivo y luego lo traduces.

keparodo escribiste:
¿Y no puedes preguntarles qué sistemas operativos están usando? Si sabes eso, ya tienes hecho casi todo el camino.
No. No puedo mi cliente es uno, pero él atiende a por lo menos 350 clientes, cada cliente tiene una o más personas que envían sus archivos, desde distintas fuentes, equipos, etc. por lo que siquiera intentar saberlo es complicado.
Pero, al menos, los archivos deben tener un formato reconocido... Excel, Word, RTF, XML, OpenDocument... Si son solo texto, vas muy mal... ¿ni siquiera puedes saber qué cliente ha dejado qué archivo? En ese caso, con el tiempo, podrías relacionar las codificaciones que usa cada cliente. Puedes sospechar que el 99% va a trabajar con Windows, así que eso reduce las codificaciones a un par de ellas: cp1252, utf-16, (y, creo, últimamente, utf-8).

keparodo escribiste:
¿En qué codificación está la base de datos?
LANG=en_US.UTF-8
Y supuestamente el servidor donde tengo la aplicación es LANG=AMERICAN_AMERICA.WE8ISO8859P15
¡Je! La base de datos está en UTF-8 y el servidor, en ISO-8859-15. ¡Qué divertido!

keparodo escribiste:Y, finalmente, me piden eliminar estos caracteres para que no sean almacenados de forma incorrecta, entiendo que eso se soluciona, al leer en la codificación correcta y al guardar en la codificación correcta, pero para hacerlo en esta última etapa, debo saber lo que leo y el problema es que es el origen el que desconozco.
Pues sí, esa es la solución. Y también el problema: si no sabes lo que recibes, un archivo de texto es indistinguible de una ristra de ceros y unos.

Hace años se publicó un artículo en la Investigación y Ciencia, donde comentaba la pervivencia de los sistemas de almacenamiento. Ponía el ejemplo de un chaval, en el 2030, donde encontraba en el desván de la casa un DVD de nuestros días, y claro, en esa época ya no existirán lectores de DVD, así que no podría leer el contenido, y aunque se hiciera con uno, necesitaría además un ordenador, y además, un sistema operativo y unos controladores... difícil... Lo peor: leyendo el contenido, los unos y ceros, de la superficie del disco, aunque técnicamente es sencillo, sería complicadísimo, y en algunos casos, imposible de entender, sin tener más información que el propio disco. En un flujo de datos, si no hay marcas, es complicado saber qué se está leyendo. Terminaba el artículo recomendando que guardáramos nuestros soportes de almacenamiento junto con instrucciones en papel de cómo habría que leerlo :lol:

A ti te pasa lo mismo... sin más información, la única solución que se me ocurre es coger el texto y probar a decodificarlo con las codificaciones más usuales, y si el resultado no da errores, pues habremos acertado.

Sería algo así:
  • Dado un texto, recorremos todas las codificaciones, desde la más popular (creemos), hasta la menos. O usas Encode->encodings() para recorrer todas.
  • Convertimos el texto, desde esa codificación a la 'UTF-8', con la función from_to(), de Encode. ¡Ojo! Es 'UTF-8', así, en mayúsculas y con un guión en medio. Nada de 'utf8' ni 'UTF8'. Son codificaciones diferentes.
  • El tercer argumento de from_to() es el CHECK, que indica qué debe ocurrir si la transformación falla: o sustituir el carácter extraño con U+FFFD, o morir con die() (que podemos capturar con eval{}), o "saltarlo" (no hacer nada).
  • Si no sale error o no obtenemos el carácter U+FFFD, entonces sí que podemos decir (con un alto porcentaje de éxito), que hemos acertado con la codificación correcta.
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: Codificación de un archivo

Notapor keparodo » 2012-05-24 21:07 @921

Aquí voy otra vez...

He probado y probado... no doy con salida.

Lo último que hice...
Lo escribo para que me orientes...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     &escribe_log("*****línea leída del archivo sin nada--> $file_line <--");
  2.  
  3.     if ( $revision == 1 ) {
  4.         foreach $codigo (@codificaciones) {
  5.             my $string = decode( $codigo, $file_line );
  6.             print STDERR "\n código ($codigo) resultado ($string)\n";
  7.             if ( $string ne '' ) {
  8.                 $codificacion = $codigo;
  9.                 last;
  10.             }
  11.         }
  12.         print STDERR "\n codificación ($codificacion) \n";
  13.         if ( $codificacion eq '' ) { $codificacion = 'ascii' }    ## por poner algo
  14.         $revision == 0;
  15.     }
  16.  
  17.     Encode::from_to( $file_line, $codificacion, "UTF-8" );        ##XXX
  18.     &escribe_log("*****línea leída con decode--> $file_line <--");
  19.     $file_line = quita_acentos($file_line);                       # para quitar los acentos de la línea
  20.     &escribe_log("*****línea después de quita acento--> $file_line <--");
  21.     $file_line = elimina_caracteres($file_line);                  # para quitar los acentos de la línea
  22.     &escribe_log("*****línea después de elimina caracteres--> $file_line <--");
  23.     $file_line =~ s/;/\;/g;
  24.     $file_line =~ s/  / /g;
  25.     &escribe_log("-----línea generada -->$file_line<--");
  26.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y este fue el resultado

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[24/05/2012 21:36:44]*****linea leída del archivo sin nada   --> 34448|98036|0010009809001|BECERRA MUÃÂOZ|CAMINO PADRE 0735 DE JAHUEL|BUIN|Región Metropolitana|NULL|NULL|(7) 7452|1| <--
[24/05/2012 21:36:44]*****linea leída con decode             --> 34448|98036|0010009809001|BECERRA MU��OZ|CAMINO PADRE 0735 DE JAHUEL|BUIN|Regi��n Metropolitana|NULL|NULL|(7) 7452|1| <--
[24/05/2012 21:36:44]*****línea después de quita acento      --> 34448|98036|0010009809001|BECERRA MUi¿½i¿½OZ|CAMINO PADRE 0735 DE JAHUEL|BUIN|Regii¿½i¿½n Metropolitana|NULL|NULL|(7) 7452|1| <--
[24/05/2012 21:36:44]*****línea después de elimina caracteres--> 34448|98036|0010009809001|BECERRA MUiiOZ|CAMINO PADRE 0735 DE JAHUEL|BUIN|Regiiin Metropolitana|NULL|NULL|(7) 7452|1| <--
[24/05/2012 21:36:44]-----línea generada                     --> 34448|98036|0010009809001|BECERRA MUiiOZ|CAMINO PADRE 0735 DE JAHUEL|BUIN|Regiiin Metropolitana|NULL|NULL|(7) 7452|1|<--
[/size]
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


y la línea del archivo original, abriéndolo con UltraEdit, al ir a VER/FIJAR CÓDIGO, aparece 1252 (ANSI - Latín I)
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
34448|98036|0010009809001|BECERRA MUÑOZ|CAMINO PADRE 0735 DE JAHUEL|BUIN|Región Metropolitana|NULL|NULL|(7) 7452|1|
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


y el dato guardado en la base de datos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
12608367        13299   34448|98036|0010009809001|BECERRA MUIIOZ|CAMINO PADRE 0735 DE JAHUEL|BUIN|REGIIIN METROPOLITANA|NULL|NULL|(7) 7452|1|
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Gracias...
Última edición por explorer el 2012-05-25 06:42 @321, editado 1 vez en total
Razón: Formateado de código con Perltidy
keparodo
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2011-12-14 17:17 @762

Re: Codificación de un archivo

Notapor explorer » 2012-05-25 10:20 @472

Supongamos que tenemos un archivo de prueba así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
¡Maño! La cigüeña bajó rápida del balcón del café.
¡Maño! La cigüeña bajó rápida del balcón del café.
¡Maño! La cigüeña bajó rápida del balcón del café.
¡Maño! La cigüeña bajó rápida del balcón del café.
ÿþ¡@M@a@ñ@o@!@ @L@a@ @c@i@g@ü@e@ñ@a@ @b@a@j@ó@ @r@á@p@i@d@a@ @d@e@l@ @b@a@l@c@ó@n@ @d@e@l@ @c@a@f@é@.@
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Aunque no lo parezca, se trata de la misma frase repetida cinco veces, codificada en utf8, cp1252, iso-8859-1, iso-8859-15 y UTF-16.

Entonces con un programa así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use feature 'say';
  3. use open OUT => qw(:utf8 :std); # Salida estándar en modo utf8
  4. use File::Slurp;
  5. use Encode 'decode';
  6. use Encode::Detect::Detector;
  7.  
  8. my @datos = read_file('kk.txt', raw => 1, chomp => 1);      # Leemos el archivo, en modo crudo,
  9.                                                             # y quitando los finales de línea
  10.  
  11. for my $datos (@datos) {                                    # por cada línea
  12.     my $charset = Encode::Detect::Detector::detect($datos); # averiguamos su juego de caracteres
  13.     my $Unicode = decode($charset, $datos);                 # y la decodificamos a Unicode interno
  14.     say "[$charset][$datos][$Unicode]";                     # salida
  15. }
  16. __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. [UTF-8][¡Maño! La cigüeña bajó rápida del balcón del café.][¡Maño! La cigüeña bajó rápida del balcón del café.]
  2. [windows-1252][¡Maño! La cigüeña bajó rápida del balcón del café.][¡Maño! La cigüeña bajó rápida del balcón del café.]
  3. [windows-1252][¡Maño! La cigüeña bajó rápida del balcón del café.][¡Maño! La cigüeña bajó rápida del balcón del café.]
  4. [windows-1252][¡Maño! La cigüeña bajó rápida del balcón del café.][¡Maño! La cigüeña bajó rápida del balcón del café.]
  5. [UTF-16LE][ÿþ¡Maño! La cigüeña bajó rápida del balcón del café.][¡Maño! La cigüeña bajó rápida del balcón del café.]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Y vemos que, efectivamente, ha adivinado todas las codificaciones (cp1252 es básicamente igual a iso-8859-1 e iso-8859-15).

Más directo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use open OUT => qw(:utf8 :std); # Salida estándar en modo utf8
  3. use Encode;
  4. require Encode::Detect;
  5.  
  6. open my $DESCONOCIDO, '<:raw', 'kk.txt';      # Abrimos en modo crudo
  7.  
  8. while (my $linea = <$DESCONOCIDO>) {          # por cada línea
  9.     chomp $linea;
  10.     my $Unicode = decode("Detect", $linea);   # "Detect" hará que Encode llame a Encode::Detect
  11.                                               # El resultado siempre estará en Unicode interno
  12.     print "[$linea]=>[$Unicode]\n";           # La salida es convertida al utf8 de nuestra terminal
  13. }
  14.  
  15. close $DESCONOCIDO;
  16.  
  17. __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
sale
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. [¡Maño! La cigüeña bajó rápida del balcón del café.]=>[¡Maño! La cigüeña bajó rápida del balcón del café.]
  2. [¡Maño! La cigüeña bajó rápida del balcón del café.]=>[¡Maño! La cigüeña bajó rápida del balcón del café.]
  3. [¡Maño! La cigüeña bajó rápida del balcón del café.]=>[¡Maño! La cigüeña bajó rápida del balcón del café.]
  4. [¡Maño! La cigüeña bajó rápida del balcón del café.]=>[¡Maño! La cigüeña bajó rápida del balcón del café.]
  5. [ÿþ¡Maño! La cigüeña bajó rápida del balcón del café.]=>[¡Maño! La cigüeña bajó rápida del balcón del café.]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Funciona igual, y de forma directa nos deja los datos en el formato interno de Perl (puntos de código Unicode). Como luego hemos definido que la salida estándar ha de ser codificada en utf8 (con el pragma 'open'), tanto la salida generada por print() como el say() es filtrada por ':utf8', y en ese momento los puntos de código Unicode son transformados a la codificación 'utf8' de mi terminal de salida.

En tu caso, ya tienes un método para averiguar las codificaciones de los textos. Luego, ya depende de en qué codificación debes guardarlos.

Encode::Detect y Encode::Detect::Detector hacen uso de la biblioteca detector de juego de caracteres Universal de Mozilla, así que habrá que darle las gracias a ellos.

Fíjate que son ejemplos idénticos a los que te enlacé en mi primera respuesta.

Edito: y aquí hay una forma de quitar los caracteres tildados:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use utf8;             # porque este ejemplo está escrito en utf8, por nada más
  2. use Text::Unidecode;
  3.  
  4. my $texto = '¡Maño! La cigüeña bajó rápida del balcón del café.';
  5. my $trans = unidecode($texto);
  6. print "$trans\n";     # !Mano! La ciguena bajo rapida del balcon del cafe.
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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: Codificación de un archivo

Notapor keparodo » 2012-05-25 14:08 @630

Hice varias actualizaciones, pero aun me da error...
¿Qué me falta?

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Use of uninitialized value in substitution (s///) at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/Encode.pm line 104.
Use of uninitialized value in exists at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/Encode.pm line 107.
Use of uninitialized value in exists at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/Encode/Alias.pm line 25.
Use of uninitialized value in hash element at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/Encode/Alias.pm line 26.
Use of uninitialized value in pattern match (m//) at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/Encode/Alias.pm line 31.
Use of uninitialized value in pattern match (m//) at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/Encode/Alias.pm line 31.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Con la segunda forma propuesta, el resultado fue:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[NOTA DE COBRO |RUT |NUMERO DE CONVENIO |NOMBRE APELLIDO |DIRECCION   |COMUNA |REGION  |FONO 1|FONO 2|FONO 3|CONCESIONARIA |]=>[NOTA DE COBRO |RUT |NUMERO DE CONVENIO |NOMBRE APELLIDO |DIRECCION   |COMUNA |REGION  |FONO 1|FONO 2|FONO 3|CONCESIONARIA |]
Unknown encoding: gb18030 at /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/Encode/Detect.pm line 54, <$DESCONOCIDO> line 2.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
keparodo
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2011-12-14 17:17 @762

Re: Codificación de un archivo

Notapor explorer » 2012-05-25 18:03 @794

No tengo ni idea... nunca había visto eso. ¿Has instalado Encode::Detect?

De todas maneras, el Perl v5.8.8 ya tiene unos años... No creo que sea por eso, pero, quién sabe.

Mi Encode es la versión 2.42 2010/12/31.

Para saber la lista de codificaciones que tu Encode es capaz de entender, ejecuta desde la línea de comandos:
perl -MEncode -e 'print join " ", Encode->encodings(":all")'

Entre las que tiene el mío, no hay ninguna que sea gb18030. Las más cercanas son gb12345-raw y gb2312-raw.

Según la Wikipedia, gb18030 corresponde al conjunto de caracteres de la República Popular China.

¿Es que le has pasado un texto en chino? :lol: :lol:

Recuerda una cosa: este procedimiento es para determinar la codificación de un texto, pero solo de lo que es puro texto. No sirve para procesar un archivo que tenga marcas o cabeceras propias que solo tengan significado para el editor o procesador de textos del que ha salido.
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 Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 36 invitados