异常情况。在1:2处有意外的引号(CSV::MalformedCSVError) Crystal

在试图解析一个亚马逊支付文件时,我偶然发现了这个特别的问题。

异常。在1:2处有意外的引用(CSV::MalformedCSVError)。

原因是什么?亚马逊支付将其文件以UTF-8编码,并带有BOM。BOM是一个可选的(在UTF-8文件中)标记。你可以用工具xxd来查看,例如

xxd apolish_amazon_2018DecMonthlyTransaction.csv | less

文件开头的三个点是BOM。(EF BB BF in Hex)。

处理BOM的问题

不幸的是,设置不同的文件编码不会有帮助,因为iconv似乎会将BOM传给你而不改变。

没有什么 "特殊 "的编码变化,你可以使用,见 我在这里列出了图标V的清单.

因此,我们需要通过读取三个字节来删除它。

apf = File.open(my_filename)

弃置 = apf.get(3)

puts (disard.expect)
apf.set_encoding("UTF-8", nil)。

进一步阅读。