Exception : Une citation inattendue à 1:2 (CSV::MalformedCSVError) Crystal
En essayant d'analyser un fichier de paiement Amazon, je suis tombé sur ce problème particulier :
Exception : Citation inattendue à 1:2 (CSV::MalformedCSVError)
La raison : Amazon Pay encode ses fichiers en UTF-8 avec BOM. Le BOM est un marqueur optionnel (dans les fichiers UTF-8). Vous pouvez le voir avec l'outil xxd par exemple
xxd apolish_amazon_2018DecMonthlyTransaction.csv | less
Les trois points au début du fichier sont la nomenclature. (EF BB BF en hexadécimal).
Traitement de la nomenclature
La définition d'un encodage de fichier différent ne sera malheureusement pas utile, car iconv semble transmettre la nomenclature sans modification.
Il n'y a pas de variations d'encodage "spéciales" que vous pourriez utiliser, cf. ma liste pour iconv ici.
Nous devons donc le supprimer en lisant trois octets.
apf = File.open(mon_filename)
discard = apf.gets(3)
met (discard.inspect)
apf.set_encoding("UTF-8", nil)