Tratar con UTF-8 números en Python
-
23-09-2019 - |
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?
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.