Excepción: Cita inesperada en 1:2 (CSV::MalformedCSVError) Crystal
Mientras trataba de analizar un archivo de pago de Amazon, me encontré con este problema en particular:
Excepción: Cita inesperada en 1:2 (CSV::MalformedCSVError)
La razón: Amazon Pay codifica sus archivos en UTF-8 con BOM. El BOM es un marcador opcional (en archivos UTF-8). Puedes verlo con la herramienta xxd por ejemplo
xxd apolish_amazon_2018DecMonthlyTransaction.csv | menos
Los tres puntos al principio del archivo son la lista de materiales. (EF BB BF en Hex).
Cómo lidiar con la lista de materiales
Establecer una codificación de archivo diferente no ayudará, ya que iconv parece pasar la lista de materiales sin cambios.
No hay variaciones de codificación "especiales" que pueda utilizar, véase mi lista para iconv aquí.
Por lo tanto, tenemos que eliminarlo leyendo tres bytes.
apf = File.open(my_filename)
descartar = apf.gets(3)
puts (descarte.inspeccionar)
apf.set_encoding("UTF-8", nil)