Uitzondering: Onverwacht citaat op 1:2 (CSV::MalformedCSVError) Kristal

Toen ik een betaalbestand van Amazon probeerde te ontleden, stuitte ik op dit specifieke probleem:

Uitzondering: Onverwacht citaat op 1:2 (CSV::MalformedCSVError)

De reden: Amazon Pay codeert zijn bestanden in UTF-8 met BOM. De BOM is een optionele (in UTF-8 bestanden) marker. Je kunt het bijvoorbeeld zien met het gereedschap xxd

xxd apolish_amazon_2018DecMonthlyTransaction.csv | minder

afbeelding

De drie puntjes aan het begin van het bestand zijn de BOM. (EF BB BF in Hex).

Omgaan met de BOM

Het instellen van een andere bestandscodering zal helaas niet helpen, omdat iconv de BOM ongewijzigd lijkt door te geven.

Er zijn geen "speciale" coderingsvarianten die je zou kunnen gebruiken, zie mijn lijst voor iconv hier.

Daarom moeten we het verwijderen door drie bytes te lezen.

apf = File.open(mijn_filenaam)

weggooien = apf.gets(3)

zet (weggooien.inspect)
apf.set_encoding("UTF-8", nil)

Verder lezen: