Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Avanzado » Leer fichero utf-8 según índices  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 7 mensajes ] 
 
Nota 2011-05-27 03:32 @189

Perlero Nuevo
Registrado: 2011-04-20 06:32 @314
Mensajes: 35
Leer fichero utf-8 según índices
Hola a todos,

Tengo un problemilla al leer un fichero de texto en formato utf-8 without BOM (para tenerlo todo especificado, ¡je,je,je!)

El problema es que tengo un fichero que contiene los índices de inicio y final de cada palabra. Si el texto a leer no contiene ningún carácter raro, todo va perfecto, pero cuando las palabras tienen acentos o ñ, se descoloca.

Es decir,

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
En la actualidad la mejor lucha contra el cancer de mama es una deteccion temprana del tumor pues aumentaran las posibilidades de exito del tratamiento.

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
En la actualidad la mejor lucha contra el cáncer de mama es una detección temprana del tumor pues aumentarán las posibilidades de éxito del tratamiento.

La salida de la lectura según los índices es totalmente diferente por problema de los acentos (obviamente, los índices han de ser los mismos para los 2 casos, ¿¿no?? xD)

¿¿Alguna idea??

¡Mil gracias!


Nota 2011-05-27 03:43 @197
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10272
Re: Leer fichero utf-8 según índices
No son acentos, son tildes.

Los caracteres acentuados ocupan dos octetos (bytes) en lugar de uno solo, en la codificación utf-8.

El problema está en el programa que crea los índices, quizás.

_________________
JF^D Perl programming


Nota 2011-05-30 06:43 @321

Perlero Nuevo
Registrado: 2011-04-20 06:32 @314
Mensajes: 35
Re: Leer fichero utf-8 según índices
Te entendí, pero no sé cómo definirlo correctamente.

Te cuento un poco la situación:

Tengo el texto A (formato ANSI (tildes y etc, en formato ó (HTML)).

A partir de aquí, voy leyendo y creo un fichero en UTF8 (texto plano) y otro fichero con los índices de inicio y fin de palabra.

El fichero A lo abro tal cual: open($fitxerVert, $parametro); sin indicarle encoding ni nada.

Para cada línea leída del fichero A hago: $linea = HTML::Entities::decode($linea); para descodificar los "patrones" como ó

Luego abro los ficheros resultantes con:
open(my $fitxerSeg1, ">:encoding(UTF-8)", "segmentado.xml");
open(my $fitxerOUT, ">:encoding(UTF-8)", "texto.txt");


Esto para la creación de los índices

Para la lectura,

open(my $fitxerOut, "<texto.txt");
binmode( $fitxerOut, ':encoding(UTF-8)');
#resultado
open(my $fitxertmp, ">prueba_elemento.txt");
binmode( $fitxertmp, ':encoding(UTF-8)');


y escribo el valor según los índices del fichero segmentado.

Entonces, mi pregunta es:

¿Cómo usar el pragma de bytes? ¿He de introducir más encode/decode?

he llegado a un punto que me sale el error:
utf8 "\xB3" does not map to Unicode

pero no sé más :(

Gracias.


Nota 2011-05-30 09:28 @436
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10272
Re: Leer fichero utf-8 según índices
Manejar Unicode es un tema complejo...

Te recomiendo la parte relativa a este tema, en el libro Modern Perl, de chromatic.

El otro día hubo una discusión, al respecto, bastante profunda, en Stack Overflow.

Una de las lecciones que hay que aprender es que no se debe abrir un fichero, tanto en lectura como en escritura, sin indicar la codificación en la que debe ser leído o escrito.

Quizás no debas fiarte de la longitud de los caracteres que has leído, sino de la posición del puntero del fichero abierto (función tell()).

El error que muestras, es debido a que estás leyendo un fichero en modo "UTF-8 estricto", por lo que saldrán errores en pantalla de todos los caracteres que no sea capaz de convertir. En concreto, está diciendo que se ha encontrado un byte "\xB3", que no es capaz de entenderlo como carácter UTF-8. Así que de ahí deducimos que el texto NO está en UTF-8 (o se trata de un error del propio texto).

"\xB3", por ejemplo, en codificación ISO-8859-15, es un "³".

_________________
JF^D Perl programming


Nota 2012-01-31 09:58 @457

Perlero Nuevo
Registrado: 2011-04-20 06:32 @314
Mensajes: 35
Re: Leer fichero utf-8 según índices
Siento recuperar un caso anterior, pero me ha salido una duda.

¿Existe en Perl la posibilidad de hacer un seek en el fichero según caracteres?, es decir,
en Java con el BufferedReader puedes leer caracteres de un fichero dando su posición (en caracteres). ¿Hay algo similar?

¡Gracias!


Nota 2012-01-31 14:09 @631
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10272
Re: Leer fichero utf-8 según índices  RESUELTO
En Perl existen las funciones seek() y sysseek(), pero la que debes usar es la primera (más información en tu ordenador perldoc -f seek), que posiciona el puntero de lectura y/o escritura.

Pero si el archivo contiene caracteres UTF-8, tenemos un problema grave. seek() siempre posiciona por número de bytes, pero eso no siempre corresponde con la posición real dentro del archivo, ya que en la codificación utf-8 puede haber caracteres con uno, dos, tres o cuatro bytes.

_________________
JF^D Perl programming


Nota 2012-02-01 03:18 @179

Perlero Nuevo
Registrado: 2011-04-20 06:32 @314
Mensajes: 35
Re: Leer fichero utf-8 según índices
Es lo que imaginaba... ¡Gracias!


Responder al tema  [ 7 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO