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

imagem

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)

Leitura adicional: