Exception: Unerwartetes Zitat bei 1:2 (CSV::MalformedCSVError) Crystal

Beim Versuch, eine Amazon-Zahlungsdatei zu analysieren, bin ich über dieses spezielle Problem gestolpert:

Exception: Unerwartetes Zitat bei 1:2 (CSV::MalformedCSVError)

Der Grund dafür: Amazon Pay kodiert seine Dateien in UTF-8 mit BOM. Das BOM ist eine optionale (in UTF-8-Dateien) Markierung. Sie können es zum Beispiel mit dem Tool xxd sehen

xxd apolish_amazon_2018DecMonthlyTransaction.csv | less

Bild

Die drei Punkte am Anfang der Datei sind die BOM. (EF BB BF in Hex).

Der Umgang mit der BOM

Die Einstellung einer anderen Dateikodierung hilft leider nicht, da iconv die BOM anscheinend unverändert weitergibt.

Es gibt keine "speziellen" Kodierungsvarianten, die Sie verwenden könnten, siehe meine Liste für iconv hier.

Daher müssen wir sie durch das Lesen von drei Bytes entfernen.

apf = File.open(mein_dateiname)

discard = apf.gets(3)

puts (discard.inspect)
apf.set_encoding("UTF-8", nil)

Lesen Sie weiter: