What I got for the fieldnames was:
I.e. the "Last Name" field got munged with \ufeff or U+FEFF in normal Unicode notation.
and the rows looked like:
Just using vim to look at the file, there seemed to be nothing weird about the first line which contains the column names. This is a ZERO WIDTH NO-BREAK SPACE character used as a Byte Order Mark (BOM). It allows reading processes, e.g. file(1)/magic(5), to figure out the byte order of the file.
But it messes up the csv.DictReader parsing of the field names.
Turns out, there is an easy fix. You can just modify the field names directly:
And the output is fixed, too: