Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Leer acentos de un archivo

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Mie Ene 23, 2008 5:11 am
leivkiz
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Ene 2008
Mensajes: 2
Leer acentos de un archivo Responder citando

Hola,

Tengo un problema al leer acentos de un archivo con Perl. Abro el archivo leo cada línea y separo las palabras por espacios, pero los acentos aparecen como espacios en blanco y televisión se convierte en "televi" y "n". ¿que debo tocar para que lea los acentos bien?

Perl:
open(FPIN, "<$mystoplist");

  while (<FPIN>) {
 
    @tokens = split(/\s+/, $_);

}
Mensaje Mie Ene 23, 2008 6:04 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4089
Ubicación: Valladolid, España
Responder citando

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

Abre el fichero de textos con un editor de textos y comprueba que los caracteres acentuados no sean realmente espacios en blanco.

La expresión regular que estás usando es muy clara: solo espacios.

Puedes incluso probar con esta línea
Perl:
@tokens = split " ";
Mensaje Mie Ene 23, 2008 6:22 am
leivkiz
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Ene 2008
Mensajes: 2
Responder citando

Gracias por la bienvenida.

No, no son espacios en blanco, son palabras con acento, debe ser algo de la codifcicacion, estoy trabajando en linux, los archivos estan en iso 8859-15. El problema es que perl al leer la linea del archivo ya se carga los acentos.
Mensaje Mie Ene 23, 2008 6:46 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4089
Ubicación: Valladolid, España
Responder citando

He hecho la prueba y mi Perl no se 'carga' ningún acento. Para Perl, es un byte más (o dos más en caso de utf8). No tiene ningún filtro que quite unos bytes de otros.

Solo hay unos casos en los que sí puede intervenir la codificación de los ficheros que manejamos:

* Si estamos usando use utf8 o use locale
* Si en el open usamos alguna capa (layer) para indicar la codificación de entrada o de salida
* Si indicamos un tipo específico de codificación, con use Encode
* Si modificamos el handle de fichero con binmode() con alguna capa de codificación

Por defecto, Perl trabaja siempre con iso-8859-1.

Pero no importa la codificación: los caracteres acentuados, sin importar que sean utf8 o latin1, no son espacios en blanco.

Haz la prueba siguiente. Haz un programa que solo abra el fichero, lea una línea y la imprima en pantalla. Esa salida la vuelcas a otro fichero y luego la ves con un editor hexadecimal. No debería haber ningún cambio con respecto al original. (Comprueba el fichero original con el hexadecimal, también, por ejemplo, con el comando hexdump -C).

No sé... quizás se me ha escapado algo, pero en las pruebas que he hecho, a mi no me parte las palabras, ni variando la codificación.
Mensaje Lun May 12, 2008 4:17 pm
diegotala
Perlero Nuevo
Perlero Nuevo
Registrado: 12 May 2008
Mensajes: 1
Responder citando

¿Y cómo hago, para que me imprima acentos?

Por ejemplo, acá les paso una parte de un script en Perl, pero en lugar de los acentos, ¡me imprime caracteres extraños!

Ya me fijé de usar use utf8; u otros, pero ninguno me funciona.

Perl:
print "\n";
print "Actualización n° $numero\n";
print " ------------------------------------------------\n";
print " - Disponible en MB -- Disponible en GB -\n";
print " - -- -\n";
print " - $var2 -- $var3 -\n";
print " - -- -\n";
print " ------------------------------------------------\n";

open(FILESP, ">>C:\libre.txt") or die 'cannot open file!';

print FILESP "$var2\n";


# close file handle
close(FILEHSP);
Mensaje Lun May 12, 2008 5:39 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 479
Ubicación: Frente al monitor
Responder citando

Perl:
open(FILESP, ">>C:\libre.txt") or die 'cannot open file!';

Me sorprende que eso te funcione ya que el backslash ("\") está "escapando" la l de libre.txt
Deberías de usar comillas simples o poner ">>C:\\libre.txt"

En cuanto a los caracteres, asegúrate que la terminal o consola soporte el encode que estás usando.
Mensaje Mar May 13, 2008 5:24 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4089
Ubicación: Valladolid, España
Responder citando

Sería interesante ver esos caracteres extraños.

Si usas use utf8 estás indicando que los caracteres que están escritos DENTRO del programa Perl están escritos en esa codificación.

Ten en cuenta también el editor que has usado para escribir el código.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group