Pregunta

Supongamos que estoy leyendo un archivo que contiene 3 números separados por comas. El archivo se guarda con con una codificación desconocida, hasta el momento estoy tratando con ANSI y UTF-8. Si el archivo estaba en UTF-8 y tenía 1 fila con los valores 115,113,12 continuación:

with open(file) as f:
    a,b,c=map(int,f.readline().split(','))

lanzaría esto:

invalid literal for int() with base 10: '\xef\xbb\xbf115'

El primer número siempre se ha mezclado con estos caracteres '\ XEF \ xbb \ XBF'. Para el resto 2 números de la conversión funciona bien. Si puedo reemplazar manualmente '\ XEF \ xbb \ XBF' con '' y luego hacer la conversión int que va a funcionar.

¿Hay una mejor manera de hacer esto para cualquier tipo de archivo codificado?

¿Fue útil?

Solución

import codecs

with codecs.open(file, "r", "utf-8-sig") as f:
    a, b, c= map(int, f.readline().split(","))

Esto funciona en Python 2.6.4. La llamada codecs.open abre el archivo de datos y devuelve como Unicode, la decodificación de UTF-8 y haciendo caso omiso de la lista de materiales inicial.

Otros consejos

Lo que están viendo es una codificación UTF-8 BOM , o "Byte marca de orden". La lista de materiales no se usa por lo general para UTF-8-archivos, por lo que la mejor manera de manejar la situación podría ser la de abrir el archivo con un códec de UTF-8, y pasar por alto el carácter U+FEFF si está presente.

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