我正在处理用户上传的csv文件,csv只有一列标题行为"API"

当我处理CSV时,对于其中一个文件,我看到

"API".downcase.length displays 4

可能是编码问题.当我为我看到的字符串做header[0].downcase.bytes

[239, 187, 191, 97, 112, 105]

当我做"api"时.我看到的字节数

[97, 112, 105]

有助于理解为什么使用"API".downcase.上面示例显示4中的长度将非常棒.

我像这样解析文件

       CSV.foreach(@file_path, headers: true) do |row|
  

谢谢

推荐答案

在本例中,看起来额外的字符来自BOM (Byte Order Mark).这些是隐藏字符,有时用于指示文件的编码类型.

处理BOM表字符的一种方法是在读取文件时指定bom|utf-*编码:

CSV.open(@file_path, "r:bom|utf-8", headers: true)

当使用bom|utf-*时,Ruby将判断输入文档中的Unicode BOM表以帮助确定编码,如果找到BOM表,则会将其删除—Ruby的IO docs将更详细地介绍这一点.

Ruby相关问答推荐

有没有办法把条件语句写得更干净?

从同名方法调用 ruby​​ 中的方法

如何从外部获取给定 lambda 的参数值,而不显式返回其绑定?

Ruby符号前面的-是什么意思?

当没有传入块时,是否有更好的方法来防止屈服?

Ruby:p *1..10中的星号是什么意思

Ruby:如何卸载设计(uninstall Devise)?

如何从 Gemfile 安装 gem?

如何从最后一个元素开始遍历数组?

如何使用 Ruby OptionParser 指定所需的switch (不是参数)?

git,Heroku:预接收挂钩被拒绝

如何按字母顺序排列忽略大小写的数组?

RSpec allow/expec vs expect/and_return

如何转换 Ruby 哈希,使其所有键都是符号?

获取Ruby中当前目录的父目录

Ruby 中的自然语言处理

以小时为单位的时差

在 Ruby 中解析制表符分隔文件的最佳方法是什么?

如何在遍历数组时使用 Array#delete?

which in ruby​​:从 ruby​​ 判断 $PATH 中是否存在程序