De vuelta con el encoding

Marcos rapto en arrakis.es
Mar Jun 20 10:42:18 CEST 2006


Un par de cosas que espero aclaren conceptos:

* utf no es unicode.

* En un fichero, el texto nunca está en unicode, sino codificado en una
codificación (ascii, utf8, cp1252...).

* El concepto de unicode, desde el punto de vista de un programador, es
que es un tipo de datos que gestiona texto especialmente bien.

* El desfase entre lo que va en los ficheros (incluyendo los
ficheros .py, los de datos, lo que se imprime a la consola, que a todos
los efectos se comporta como un fichero) y los objetos de texto internos
(que ciertamente deberían ser siempre unicode) se arregla de varias
maneras:

** Con la cabecera
	# -*- coding: UTF-8 -*-
   indicamos en qué codificación estamos guardando el texto (y repito
que en un fichero el texto siempre está codificado en alguna
codificación). Hay que ser coherente con el editor de texto que usemos.
Cualquier editor de texto serio indica en qué codificación está
guardando el texto.

** Al leer datos de una fuente externa, elegiremos la que nos permita
obtener unicode directamente (hay módulos que lo permiten, los de bases
de datos, por ejemplo) o descodificaremos de inmediato la entrada para
que internamente sea unicode.

** Al sacar datos, codificaremos la salida para que la codificación sea
la que espera el receptor.

En breves palabras: La Entrada/Salida siempre va codificada y conviene
que la codificación sea explícita. El texto interno debería ir siempre
en unicode (creando las cadenas con unicode() o con u''). Al presentar
texto o escribirlo a un fichero, hay que codificarlo y conviene que la
codificación sea explícita. 

El lun, 19-06-2006 a las 13:49 +0200, camontuyu escribió:
> Hola, 
> 
> tengo un ligero lío (más bien de concepto) sobre el encoding y las
> ordenes encode y decode.
> 
> Se supone que si pongo la directiva
> 
> # -*- coding: UTF-8 -*-
> 
> en los ficheros python, todas las cadenas que ponga se codificarán como
> unicode.
> 
> El problema viene en las comparaciones de cadenas. Leo de una web una
> serie de datos que viene con el formato charset=ISO-8859-1
> y claro cuando comparo con mis cadena y tienes caracteres como la ñ
> no las reconoce
> 
> si cambio la directiva por 
> 
> # -*- coding: ISO-8859-1 -*-
> 
> va bien, pero no me gusta, ya que quiero el texto en utf8
> 
> así como soluciono el problema de los distintos encoding.
> 
> Agradecería cualquier comentario.
> 
> Muchas gracias. Ta pronto.
> 
> 
> 		
> ______________________________________________ 
> LLama Gratis a cualquier PC del Mundo. 
> Llamadas a fijos y mviles desde 1 cntimo por minuto. 
> http://es.voice.yahoo.com
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es

------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es