Estoy trabajando en una herramienta de Python que debe poder abrir archivos de codificación UTF-8 y UTF-16. En Python 3.2, utilizo el siguiente código para tratar de abrir el archivo con codificación UTF-8, a continuación, tratar con UTF-16 si hay un error de Unicode:¿Cómo puedo abrir archivos UTF-16 en Python 2.x?
def readGridFromPath(self, filepath):
try:
self.readGridFromFile(open(filepath,'r',encoding='utf-8'))
except UnicodeDecodeError:
self.readGridFromFile(open(filepath,'r',encoding='utf-16'))
(readGridFromFile
, o bien ejecutar hasta el final, o subir . una UnicodeDecodeError
)
sin embargo, cuando ejecuta este código en Python 2.x, me sale:
TypeError: 'encoding' is an invalid keyword argument for this function
que ver en la documentación que Python 2.x de open()
no tiene una palabra clave encoding
. ¿Hay alguna forma de evitar esto que me permita hacer compatible mi código Python 2.x?
Buena llamada, 'io.open' es la mejor opción. Sin embargo, las desventajas de 'codecs.open' no son lo suficientemente importantes como para llamarlo" inadecuado ", en mi humilde opinión. –
Por cierto, la afirmación sobre 'codecs.open' que no maneja la BOM correctamente es simplemente incorrecta (lo intenté). Sin embargo, el hecho de que no se conviertan automáticamente líneas nuevas es cierto (pero esta parece ser la única diferencia). –
Lo he intentado de nuevo, para UTF-16 BE/LE funciona bastante bien, pero para UTF8 su BOM (EB BB BF) se deja en texto decodificado como u '\ ubeff'. Recuerdo claramente que tuve problemas de decodificación con BOM utilizando '.decode()' en Windows, pero no puedo probarlo ahora. He solucionado ese reclamo por justicia. – toriningen