Ruby “神秘领导”;“空的”;来自CSV文件的字符串开头的字符

Ruby “神秘领导”;“空的”;来自CSV文件的字符串开头的字符,ruby,csv,byte-order-mark,zero-width-space,Ruby,Csv,Byte Order Mark,Zero Width Space,在将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”] 我检查了数组中的所有其他元素,这是唯一一个包含前导“”字符串的元素 现在,在我发布这个问题之前,我无意

在将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时,我发现了这篇文章:

根据SLaks:

这是一个零宽度无中断空间。它更常用作一种语言 字节顺序标记(BOM)

这反过来又让我找到了解决方案:
在这一响应中,克努特提供了一个优雅的解决方案,如下所示:

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
CSV.foreach($CSV_路径+CSV_文件,“r:bom | utf-8”)do |行|

联系人我真的不同意将此作为副本关闭。参考文章中的问题与本文完全不同。如果我在研究中遇到它,我会忽略它,因为它不能解释我的问题。通过否决这个问题,你阻止了我发布有价值的信息,这些信息可能会帮助其他遇到同样问题的人。我描述问题/答案的方式侧重于症状。你至少可以发布一个相互竞争的答案来解释发生了什么。零宽度空间的主题是一个没有太多答案的主题-我不喜欢零宽度空间,因为我认为电子邮件客户端、web浏览器和文字处理程序的处理不统一。。。此主题不应关闭。根据此页面,我正在使用CSV库解析文件:
我不理解您提出的原始问题和后续答案。谢谢。我不知道我是否曾经发现过零宽度空间——在我的过程中的某个时刻转换成了普通空间。“它是从哪里来的?”安尼塔格拉汉姆我不知道它是从哪里来的。我想了解我自己。