• Publicidad

Codificación utf8 de disco a disco, de disco al navegador

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Codificación utf8 de disco a disco, de disco al navegador

Notapor Dgrande » 2011-04-22 03:36 @191

Hola amigos.

Tengo una duda eterna.

¿Cuál es la correcta operativa a seguir...? Os explico:

Leo ficheros de texto y los grabo troceados en otros ficheros de texto en el disco que contienen caracteres latinos, u otros.

Más tarde los leo y los presento en pantalla con un cgi.

Busco una solución pues no sé detectar la codificación inicial del fichero y los pasos posteriores a seguir.

mi programa contiene
use utf8;
  1. leo un fichero en disco (quiero comprobar la codificación de ese fichero)
  2. quiero procesar el texto correctamente en mi programa en utf8
  3. quiero grabarlo en utf8 en el disco (sin que se me pierdan caracteres)
  4. quiero leerlo y procesarlo correctamente en utf8 en un script web.
  5. quiero presentar la información en pantalla de forma correcta sin que se me muestren caracteres raros.

La verdad es que me he encontrado muchas veces con este problema.

Un saludo.

¿ Ideas ?
Dgrande
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2010-02-03 04:59 @249

Publicidad

Re: Codificación utf8 de disco a disco, de disco al navegador

Notapor explorer » 2011-04-22 07:13 @342

Lo primero: te recomiendo que leas el libro de chromatic, Modern Perl (enlace al libro al final de ese mensaje). Sobre todo el par de páginas relativas a la explicación de cómo funciona Perl con las codificaciones internas de caracteres.

Otro enlace que hay que revisar es el wikibook Perl Programming/Unicode UTF-8. Ahí está todo explicado, aunque sea un auténtico ladrillo (el resumen está en el libro de chromatic).

El flujo de trabajo para trabajar con utf8 está indicado en la sección UTF-8 Flow, pero el más general es:
  • decodificar la entrada al programa, desde la codificación en la que viene, a la interna de Perl
  • procesar el texto como queramos
  • a la hora de la salida, codificar desde la representación interna de Perl a la que deseemos entregar a la salida
Vamos, lo mismo que te respondí hace tiempo.

En cuanto a tu programa...
  • use utf8; indica que el propio programa contiene caracteres en utf8. NO realiza labores de transliteración.
  • para "adivinar" la codificación de un fichero (del que no sabemos nada), se puede usar algún módulo, como por ejemplo Encode::Guess (aunque este solo detectará codificaciones ascii, utf8 y UTF-16 o UTF-32 que tengan la marca BOM).
  • una vez que sabes qué codificación es, la puedes pasar al formato interno de Perl, o hacer que todas las operaciones de cadena sean en utf8, que es el otro formato interno en que Perl puede trabajar.
  • para grabarlo en disco, en utf8, debes indicarlo así en la capa (layer) del open(), para que haga la transformación, según lo que vayas a escribir esté en formato interno o utf8.
  • para la salida en web, es lo mismo que la salida en disco, debes decidir la codificación de la página que vas a enviar, y actualizar la marca <meta> de forma apropiada. Por ejemplo:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using html4strict Syntax Highlighting
    1. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
  • para la salida en pantalla, es lo mismo que la salida en disco, solo que la pantalla tiene su propia codificación. Debes averiguar en qué codificación está trabajando esa terminal.
Al principio, cuesta.

Yo mismo, muchas veces, cuando estoy haciendo un programa que, por ejemplo, va a leer una hoja de cálculo Excel, ya me estoy acordando de la familia que inventó esto, porque resulta que cada celda puede estar en una codificación distinta, así que te ves obligado a mirar los atributos de formateo de cada celda, pasarlo todo a una codificación estándar (con la ayuda de Encode), procesarlo, y mandarlo a la web con otra codificación de salida (normalmente, utf8).

Al final, todo se reduce a lo comentado: decodificar, procesar, codificar.

Perl v5.14 trae más mejoras para gestionar utf8. Incluso trae un nuevo pragma llamado unicode_strings, con el que podremos indicar que todas las operaciones las queremos realizar en modo Unicode (y no como si fueran una ristra de bytes).
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 utf8 de disco a disco, de disco al navegador

Notapor Dgrande » 2011-04-22 08:21 @389

Gracias
Pero cuesta...
Dgrande
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2010-02-03 04:59 @249

Re: Codificación utf8 de disco a disco, de disco al navegador

Notapor explorer » 2011-04-22 13:08 @589

Pues para que cueste menos, estamos aquí.

P.D. Bienvenido a la torre de Babel.
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 Intermedio

¿Quién está conectado?

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