Vuelva a codificar la secuencia Unicode como Ascii ignorando errores

Estoy tratando de tomar una secuencia de archivo Unicode, que contiene caracteres extraños, y envolverla con un lector de secuencia que la convertirá a Ascii, ignorando o reemplazando todos los caracteres que no se pueden codificar.

Mi transmisión se ve así:

"EventId","Rate","Attribute1","Attribute2","(。・ω・。)ノ"
...

Mi intento de alterar la transmisión sobre la marcha se ve así:

import chardet, io, codecs

with open(self.csv_path, 'rb') as rawdata:
    detected = chardet.detect(rawdata.read(1000))

detectedEncoding = detected['encoding']
with io.open(self.csv_path, 'r', encoding=detectedEncoding) as csv_file:
    csv_ascii_stream = codecs.getreader('ascii')(csv_file, errors='ignore')
    log( csv_ascii_stream.read() )

El resultado en ellog la línea es:UnicodeEncodeError: 'ascii' codec can't encode characters in position 36-40: ordinal not in range(128) a pesar de que explícitamente construí el StreamReader conerrors='ignore'

Me gustaría que la secuencia resultante (cuando se lea) salga así:

"EventId","Rate","Attribute1","Attribute2","(?????)?"
...

o alternativamente,"EventId","Rate","Attribute1","Attribute2","()" (utilizando'ignore' en lugar de'replace')

¿Por qué ocurre la excepción de todos modos?

He visto muchos problemas / soluciones para decodificar cadenas, pero mi desafío es cambiar la transmisión a medida que se lee (usando.next()), porque el archivo es potencialmente demasiado grande para cargarlo en la memoria de una vez usando.read()

Respuestas a la pregunta(2)

Su respuesta a la pregunta