Exceção: Citação inesperada a 1:2 (CSV::MalformedCSVError) Cristal
Enquanto tentava analisar um ficheiro de pagamento da Amazon, deparei-me com este problema em particular:
Exceção: Citação inesperada a 1:2 (CSV::MalformedCSVError)
A razão: A Amazon Pay codifica os seus ficheiros em UTF-8 com BOM. A BOM é um marcador opcional (em arquivos UTF-8). Você pode vê-lo com a ferramenta xxd, por exemplo
xxd apolish_amazon_2018DecMonthlyTransaction.csv | less
Os três pontos no início do arquivo são a lista técnica. (EF BB BF em Hex).
Como lidar com a lista técnica
Definir uma codificação de arquivo diferente infelizmente não ajudará, já que o iconv parece passar a lista técnica inalterada.
Não há variações "especiais" de codificação que você poderia usar, veja minha lista para iconv aqui.
Portanto, precisamos de o remover lendo três bytes.
apf = File.open(my_filename)
descartar = apf.gets(3)
coloca (descartar.inspeccionar)
apf.set_encoding("UTF-8", nulo)