2015-11-08 92 views
2

在将CSV文件读入数组的过程中,我注意到第一个数组元素是一个字符串,它包含一个前导“”。来自CSV文件的字符串开头的神秘领先“空”字符

例如:

str = contacts[0][0] 
p str 

给我...

“SalesRepName”

然后纯属偶然,我碰巧尝试:

str = contacts[0][0].split(//) 
p str 

an d,给我...

[“”,“S”,“a”,“l”,“e”,“s”,“R”,“e”,“p”, “N”,“一个”,“M”,“E”]

我已经检查所有其他元素的数组中,这是具有包含前导“”的字符串的唯一的一个。

+1

我诚实地不同意这被封闭作为重复。引用文章中的问题与此不完全相同。如果我在研究期间遇到它,我会忽略它,因为它没有解释我遇到的问题。通过对这个问题进行投票反对,您会阻止我发布有价值的信息,这可能会帮助遇到同样问题的其他人。我描述问题/答案的方式主要关注症状。你能做的至少是发布一个解释发生了什么的竞争性答案。 – brianjason

+1

ZERO WIDTH SPACE的主题是没有太多答案的地方 - http://www.verkltas.club/questions/tagged/zero-width-space?sort=votes&pageSize=15 我不是零宽度空间,因为我认为是电子邮件客户端,网络浏览器和文字处理器的不统一处理... 不应该关闭此主题。 – Xofo

回答

4

现在,在我发布这个问题之前,我偶然发现了答案。显然,我写这个问题的行为给了我确定这个字符的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
在此回应,克努特提供了一个很好的解决方案,它是这样的:

File.open('file.txt', "r:bom|utf-8"){|file| 
    text_without_bom = file.read 
} 

随着,“R: bom | utf-8“是我正在寻找的关键元素。 所以我把它adapated我的代码,这成了这样:

CSV.foreach($csv_path + $csv_file, "r:bom|utf-8") do |row| 
    contacts << row 
end 

我花了几个小时就这个愚蠢的问题。希望这会为你节省一些时间!

+1

根据此页面,我使用CSV库来解析文件:http://ruby-doc.org/stdlib-2.2.3/libdoc/csv/rdoc/CSV.html
我不理解您的问题用我原来的问题和随后的回答 – brianjason

+0

谢谢@holaymolay! –