hol*_*lay 3 ruby csv byte-order-mark zero-width-space
在将CSV文件读入数组的过程中,我注意到第一个数组元素,它是一个字符串,包含一个前导"".
例如:
str = contacts[0][0]
p str
Run Code Online (Sandbox Code Playgroud)
给我...
"SalesRepName"
然后我偶然尝试尝试:
str = contacts[0][0].split(//)
p str
Run Code Online (Sandbox Code Playgroud)
那给了我......
["","S","a","l","e","s","R","e","p","N","a","m"," E"]
我已经检查了数组中的每个其他元素,这是唯一一个包含前导""的字符串.
现在,在我发布这个问题之前,我偶然发现了答案.显然,我写这个问题的行为让我想到了确定这个""字符的ascii数.
str = contacts[0][0].split(//)
p str[0].codepoints
Run Code Online (Sandbox Code Playgroud)
给我
[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
}
Run Code Online (Sandbox Code Playgroud)
随着,"r:bom | utf-8"是我一直在寻找的关键因素.所以我将它改编为我的代码,它变为:
CSV.foreach($csv_path + $csv_file, "r:bom|utf-8") do |row|
contacts << row
end
Run Code Online (Sandbox Code Playgroud)
我在这个愚蠢的问题上花了好几个小时.希望这会节省你一些时间!
| 归档时间: |
|
| 查看次数: |
743 次 |
| 最近记录: |