神秘的领导"空"来自CSV文件的字符串开头的字符

时间:2015-11-08 09:18:09

标签: ruby csv byte-order-mark zero-width-space

在将CSV文件读入数组的过程中,我注意到第一个数组元素是一个字符串,包含一个前导""

例如:

meteor create myapp
cd myapp
meteor

给了我......

  

" SalesRepName"

然后我偶然尝试尝试:

str = contacts[0][0]
p str

那给了我......

  

[""," S"," a"," l"," e", " s"," R"," e"," p"," N"," a& #34;," m"," e"]

我已经检查了数组中的每个其他元素,这是唯一一个包含前导""的字符串。

1 个答案:

答案 0 :(得分:6)

现在,在我发布这个问题之前,我偶然发现了答案。显然,我写这个问题的行为给了我一个确定这个""的ascii数的想法。字符。

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

给了我

  

[65279]

在询问ascii字符65279后,我发现这篇文章: https://stackoverflow.com/a/6784805/3170942

据SLaks说:

  

它是一个零宽度的不间断空间。它更常用作a   字节顺序标记(BOM)。

这反过来又让我得到了解决方案: https://stackoverflow.com/a/7780559/3170942
在这个回复中,knut提供了一个优雅的解决方案,如下所示:

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

," r:bom | utf-8" 是我要找的关键元素。 所以我把它改编成了我的代码,它变成了这个:

File.open('file.txt', "r:bom|utf-8"){|file|
  text_without_bom = file.read
}
我在这个愚蠢的问题上花了好几个小时。希望这会节省你一些时间!