Supongamos que estoy leyendo un archivo que contiene 3 números separados por comas. El archivo se guardó con una codificación desconocida, hasta ahora estoy lidiando con ANSI y UTF-8. Si el archivo estaba en UTF-8 y tenía 1 fila con los valores 115,113,12 entonces:Tratar con números UTF-8 en Python
with open(file) as f:
a,b,c=map(int,f.readline().split(','))
tiraría esto:
invalid literal for int() with base 10: '\xef\xbb\xbf115'
El primer número es siempre destrozado con estos '\ XEF \ xbb \ xbf 'personajes. Para el resto, 2 números la conversión funciona bien. Si reemplazo manualmente '\ xef \ xbb \ xbf' con '' y luego realizo la conversión int, funcionará.
¿Hay una forma mejor de hacerlo para cualquier tipo de archivo codificado?
Gracias. Esto funciona en mis archivos UTF-8 pero falla en Unicode y Unicode big endian. ¿Hay alguna manera infalible de abrir cualquier tipo de archivo codificado y obtener esos números o tendría que especificar explícitamente la codificación? –
AFAIK tiene que especificar la codificación. Obviamente, puede escribir una pequeña función que haga las tres pruebas y devuelva un archivo decodificado apropiadamente. – tzot
Genial. Encontré el módulo chardet que hace exactamente este http://chardet.feedparser.org/ –