Решение Python 3 протестировано с одним встроенным нулевым символом и одним символом из cp1254, который недопустим в utf-8:
import csv
# create test file
lines = ['a,b,c,d,e',
'1,2,"3,000.26",\u00CExx,5',
'6,7\x00,800.08,aaa,10']
with open('test.csv', 'w', encoding='cp1254', newline='') as f:
for line in lines:
f.write(line + '\r\n')
# solution
with open('test.csv', 'r', encoding='cp1254', newline='') as f:
reader = csv.DictReader(line.replace('\0', '') for line in f)
# print rows to show it works
for row in reader:
print(row)
выводит
OrderedDict([('a', '1'), ('b', '2'), ('c', '3,000.26'), ('d', 'Ïxx'), ('e', '5')])
OrderedDict([('a', '6'), ('b', '7'), ('c', '800.08'), ('d', 'aaa'), ('e', '10')])