Cuando uso open()
para abrir un archivo, no puedo escribir cadenas de unicode. Aprendí que necesito usar codecs
y abrir el archivo con codificación Unicode (ver http://docs.python.org/howto/unicode.html#reading-and-writing-unicode-data).¿Cómo crear un archivo temporal con codificación Unicode?
Ahora necesito crear algunos archivos temporales. Traté de usar la biblioteca tempfile
, pero no tiene ninguna opción de codificación. Cuando trato de escribir cualquier cadena Unicode en un archivo temporal con tempfile
, falla:
#!/usr/bin/python2.6
# -*- coding: utf-8 -*-
import tempfile
with tempfile.TemporaryFile() as fh:
fh.write(u"Hello World: ä")
fh.seek(0)
for line in fh:
print line
¿Cómo puedo crear un archivo temporal con la codificación Unicode en Python?
Editar:
estoy usando Linux y el mensaje de error que me sale de este código es:
Traceback (most recent call last): File "tmp_file.py", line 5, in <module> fh.write(u"Hello World: ä") UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 13: ordinal not in range(128)
- Esto es sólo un ejemplo. En la práctica, intento escribir una cadena que devuelva alguna API.
Sí. Por lo tanto, no es necesario abrir el archivo temporal con alguna opción Unicode mágica, es suficiente para escribir una cadena explícitamente codificada: 'fh.escribe (u'föo bār'.encode ('utf-8')) '. Reemplace 'utf-8' con 'utf-16' si la mayoría de sus personajes son CJK. – 9000
@ 9000: tenga cuidado con este método si usa 'utf-16'. Si lo hace, tendrá que escribir todo el archivo de una vez, porque la codificación ('utf-16') también muestra la lista de materiales del archivo. Si tiene varias cadenas para escribir en el mismo archivo, la primera debe estar con .encode ('utf-16') y las siguientes con .encode ('utf-16-le') que no envía la lista de materiales. El uso de alguna opción mágica Unicode evitar este escollo. – kriss
'" abc "' es una cadena Unicode en Python 3 o en presencia de 'from __future__ import unicode_literals'. – jfs