Ruby “神秘领导”;“空的”;来自CSV文件的字符串开头的字符
在将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”] 我检查了数组中的所有其他元素,这是唯一一个包含前导“”字符串的元素 现在,在我发布这个问题之前,我无意
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库解析文件:
我不理解您提出的原始问题和后续答案。谢谢。我不知道我是否曾经发现过零宽度空间——在我的过程中的某个时刻转换成了普通空间。“它是从哪里来的?”安尼塔格拉汉姆我不知道它是从哪里来的。我想了解我自己。