[pyar] Codificación de archivos...

Alejandro Santos listas en alejolp.com
Mar Jul 12 16:39:27 ART 2011


2011/7/9 Mauricio Baeza <mauricio en correolibre.net>
>
> Me respondo a mi mismo por si a alguien le sirve...
>
> El Notepad de Window le agrega un BOM al archivo al guardar como UTF-8: http://es.wikipedia.org/wiki/Marca_de_orden_de_bytes_%28BOM%29
>
> El script de Python modificado quedaría así para lograr esto:
>
> # python
> import codecs
>
> path='original.xml'
> path2='original_ok.xml'
>
> f= open(path, 'rb')
> content= f.read()
> f.close()
> f= open(path2, 'wb')
> f.write( codecs.BOM_UTF8 )
> f.write(content.encode('utf-8'))
> f.close()
>

Mauricio,

No deberías hacer un encode de los datos sino simplemente escribirlos
directamente tal cual están en el archivo.

La operación de encode solo "tiene sentido" hacerla sobre un string
Unicode. Si el archivo tiene datos UTF-8 es más que seguro que te va a
disparar en algún momento un UnicodeDecodeError:

Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48)
>>> f = open("utf8.txt", "rb")
>>> a = f.read()
>>> b = a.encode("utf8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
0: ordinal not in range(128)

Esto mismo en Python 3 te dice que la operación "encode" no existe:

>>> a.encode("utf-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'encode'

Saludos,

--
Alejandro Santos
http://alejolp.com.ar



More information about the pyar mailing list