Mie Ene 23, 2008 5:11 am
|
 |
leivkiz
Perlero Nuevo

|
Registrado: 23 Ene 2008
Mensajes: 2
|
|
| Leer acentos de un archivo |
|
|
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+/, $_);
} |
|
|
|
|
Mie Ene 23, 2008 6:04 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4089
Ubicación: Valladolid, España
|
|
|
|
|
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
|
|
Mie Ene 23, 2008 6:22 am
|
 |
leivkiz
Perlero Nuevo

|
Registrado: 23 Ene 2008
Mensajes: 2
|
|
|
|
|
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. |
|

Mie Ene 23, 2008 6:46 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4089
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|

Lun May 12, 2008 4:17 pm
|
 |
diegotala
Perlero Nuevo

|
Registrado: 12 May 2008
Mensajes: 1
|
|
|
|
|
¿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 ); |
|
|

Mar May 13, 2008 5:24 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4089
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|