Aquí dos preguntas. Tengo un conjunto de archivos que suelen ser UTF-8 con BOM. Me gustaría convertirlos (idealmente en su lugar) a UTF-8 sin BOM. Parece codecs.StreamRecoder(stream, encode, decode, Reader, Writer, errors)
que manejaría esto. Pero realmente no veo buenos ejemplos de uso. ¿Sería esta la mejor manera de manejar esto?
source files:
Tue Jan 17$ file brh-m-157.json
brh-m-157.json: UTF-8 Unicode (with BOM) text
Además, sería ideal si pudiéramos manejar diferentes codificaciones de entrada sin saberlo explícitamente (visto ASCII y UTF-16). Parece que todo esto debería ser factible. ¿Existe una solución que pueda tomar cualquier codificación y salida de Python conocida como UTF-8 sin BOM?
editar 1 sol'n propuesto desde abajo (¡gracias!)
fp = open('brh-m-157.json','rw')
s = fp.read()
u = s.decode('utf-8-sig')
s = u.encode('utf-8')
print fp.encoding
fp.write(s)
Esto me da el siguiente error:
IOError: [Errno 9] Bad file descriptor
Noticias de última hora
En los comentarios me dicen que el error es que abro el archivo con el modo 'rw' en lugar de 'r +' / 'r + b', por lo que eventualmente debería volver a editar mi pregunta y eliminar la parte resuelta.
r+
modo. Agregueb
también para que funcione también en Windows sin ningún negocio divertido que termine la línea. Finalmente, querrá volver al principio del archivo y truncarlo al final; consulte mi respuesta actualizada.