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
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)