ruby - 来自 CSV 文件的字符串开头的神秘前导 "empty"字符

标签 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"]

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

最佳答案

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

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

给我

[65279]

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

根据 SLaks:

It's a zero-width no-break space. It's more commonly used as a byte-order mark (BOM).

反过来,这让我想到了这里的解决方案: https://stackoverflow.com/a/7780559/3170942
在这个响应中,knut 提供了一个优雅的解决方案,看起来像这样:

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

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

关于ruby - 来自 CSV 文件的字符串开头的神秘前导 "empty"字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33592432/

相关文章:

ruby - Cocoapods 安装

php - 导入 CSV 数据时跳过重复值

c# - 拆分字符串并忽略引号内的定界符

python - 在 pandas 的帮助下按条件删除行

Java:比较字符串

ruby - 将 sqlite3 与 Ruby 一起使用,有没有办法将每一行读取为散列而不是数组?

ruby - 解释 Ruby 代码片段

twitter-bootstrap - 由于变量,less 转换为 css 出错

c# - 保存 XML 时强制无 BOM

ruby - 如何在不等待 Ruby 响应的情况下发出 HTTP 请求