[在将CSV文件读入数组的过程中,我注意到第一个数组元素(它是一个字符串)包含一个前导“”。
例如:
str = contacts[0][0]
p str
给我...
“ SalesRepName”
然后,我碰巧尝试了:
str = contacts[0][0].split(//)
p str
那给了我...
[“”,“ S”,“ a”,“ l”,“ e”,“ s”,“ R”,“ e”,“ p”,“ N”,“ a”,“ m” ,“ e”]
我已经检查了数组中的所有其他元素,这是唯一具有包含前导“”的字符串的元素。
现在,在我发布这个问题之前,我偶然发现了答案。显然,我写下问题的举动使我想到了确定此“”字符的ASCII码的想法。
str = contacts[0][0].split(//)
p str[0].codepoints
给我
[65279]
询问ascii字符65279时,我发现了这篇文章:https://stackoverflow.com/a/6784805/3170942
根据SLaks:
这是零宽度的不间断空格。它更常用作 字节顺序标记(BOM)。
反过来,这导致我在这里找到解决方案:https://stackoverflow.com/a/7780559/3170942在此响应中,knut提供了一个优雅的解决方案,看起来像这样:
File.open('file.txt', "r:bom|utf-8"){|file|
text_without_bom = file.read
}
使用,“ r:bom | utf-8”是我正在寻找的关键元素。因此,我将其适应了我的代码,变成了这样:
CSV.foreach($csv_path + $csv_file, "r:bom|utf-8") do |row|
contacts << row
end
我花了几个小时解决这个愚蠢的问题。希望这可以节省您一些时间!