Pregunta

Tengo una colección de archivos codificados en ANSI o UTF-16LE. Me gustaría que Python abra los archivos utilizando la codificación correcta. El problema es que los archivos ANSI no generan ningún tipo de excepción cuando se codifican con UTF-16le y viceversa.

¿Existe una forma sencilla de abrir los archivos utilizando la codificación de archivo correcta?

¿Fue útil?

Solución

Use la biblioteca chardet para detectar la codificación.

Otros consejos

Puede consultar la BOM al comienzo de el archivo para comprobar si es UTF.

Luego, unicode.decode en consecuencia (utilizando uno de los < a href = "http://docs.python.org/library/codecs.html#standard-encodings" rel = "nofollow noreferrer"> codificaciones estándar ).

EDIT O, tal vez, intente en el código ('ascii') su cadena (dado que s es el nombre de la variable). Si lanza UnicodeDecodeError, decodifíquelo como 'utf_16_le'.

¿Qué hay en los archivos? Si se trata de texto sin formato en un alfabeto latino, casi todos los bytes de los archivos UTF-16LE serán cero. En los archivos de Windows-1252, por otra parte, no esperaría ver ceros en absoluto. Por ejemplo, aquí está “Hello” en windows-1252:

93 48 65 6C 6C 6F 94

... y en UTF-16LE:

1C 20 48 00 65 00 6C 00 6C 00 6F 00 1D 20

Aparte de las comillas, cada carácter se asigna al mismo valor, con la adición de un byte cero final. De hecho, eso es cierto para todos los caracteres en el conjunto de caracteres ISO-8859-1 (windows-1252 extiende ISO-8859-1 para agregar asignaciones para varios caracteres de impresión, como comillas, para reemplazar los caracteres de control en el rango 0x80..0x9F ).

Si sabe que todos los archivos son windows-1252 o UTF-16LE, todo lo que necesita para averiguar cuál es cuál es un análisis rápido de los ceros. Hay una buena razón por la que Chardet es tan lento y complejo, pero en este caso creo que puedes salirte rápido y sucio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top