CSV reader picks up garbage in the first few characters
That first character is the Byte order mark character.
Try this:
with open("20180223.csv", encoding="utf-8-sig") as csvfile:
This advice is somewhat hidden away in the documentation, but it is there:
In some areas, it is also convention to use a “BOM” at the start of UTF-8 encoded files; the name is misleading since UTF-8 is not byte-order dependent. The mark simply announces that the file is encoded in UTF-8. Use the ‘utf-8-sig’ codec to automatically skip the mark if present for reading such files.