Eccezione: Citazione inattesa a 1:2 (CSV::MalformedCSVError) Crystal
Mentre cercavo di analizzare un file di pagamento Amazon, mi sono imbattuto in questo particolare problema:
Eccezione: Citazione inattesa a 1:2 (CSV::MalformedCSVError)
Il motivo: Amazon Pay codifica i suoi file in UTF-8 con BOM. Il BOM è un marcatore opzionale (nei file UTF-8). Potete vederlo con lo strumento xxd per esempio
xxd apolish_amazon_2018DecMonthlyTransaction.csv | less
I tre punti all'inizio del file sono la BOM. (EF BB BF in Hex).
Trattare con la BOM
Impostare una codifica diversa per i file purtroppo non aiuta, poiché iconv sembra passare la BOM inalterata.
Non ci sono variazioni di codifica "speciali" che potresti usare, vedi la mia lista per iconv qui.
Quindi dobbiamo rimuoverlo leggendo tre byte.
apf = File.open(my_filename)
scartare = apf.gets(3)
mette (discard.inspect)
apf.set_encoding("UTF-8", nil)