字符串长度多显示一个字符 - ruby

string length display one character extra - ruby

我正在处理用户上传的 csv 文件,csv 只有一列 header 行“API”

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

"API".downcase.length displays 4

会不会是编码问题。当我对字符串执行 header[0].downcase.bytes 时,我看到

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

当我执行“api”.bytes 我看到

[97, 112, 105]

如果能帮助理解上面示例显示 4 中的“API”.downcase.length 的原因,那就太好了。

我像这样解析文件

       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 对此进行了更详细的介绍。