Ruby中CSV.open中的rb:bom | utf-8是什么意思?

时间:2019-07-15 02:08:32

标签: ruby csv byte-order-mark

// the object, which doesn't get exported var someObject = { my: 'object supports the function', below: 'and it is quite long which', is: 'why I split it off into its', own: 'separate object.' } // the function, which does get exported function myFunc(input) { return someObject[input] } // this apparently works fine module.exports = { myFunc } 是什么意思:

myFunc

我可以理解:

  1. 'rb:bom|utf-8'表示已读
  2. CSV.open(csv_name, 'rb:bom|utf-8', headers: true, return_headers: true) do |csv|是一种文件格式,在文件的开始处带有r 表示字节序。
  3. bom是文件格式

但是:

  1. 我不知道它们如何配合以及为什么有必要编写所有这些来阅读csv
  2. 我正在努力寻找有关的文档 这个。它似乎没有记录在
    https://ruby-doc.org/stdlib-2.6.1/libdoc/csv/rdoc/CSV.html

更新:

找到了一个非常有用的文档: https://ruby-doc.org/core-2.6.3/IO.html#method-c-new-label-Open+Mode

2 个答案:

答案 0 :(得分:2)

(接受的答案不是不正确,但不完整)

rb:bom|utf-8转换为可读的句子意味着:

以二进制模式(r)打开文件以进行读取(b)并查找Unicode BOM标记(bom)以检测编码,或者找不到BOM标记,请采用UTF-8编码(utf-8)。

BOM标记可用于检测文件是UTF-8还是UTF-16,如果文件是UTF-16,则是小端大UTF-16还是大端大UTF-16。还有一个用于UTF-32的BOM标记,但是Ruby到目前为止不支持UTF-32。 BOM标记只是Unicode标准中的一个特殊保留字节序列,仅用于检测文件的编码,它必须是该文件的第一个“字符”。建议使用UTF-16,因为UTF-16有两个不同的版本,因此通常用于UTF-16;对于UTF-8,它是可选的;通常,如果文件是Unicode但没有BOM标记,则假定它是UTF-8。

答案 1 :(得分:1)

在Ruby中读取文本文件时,您需要指定编码,否则它将恢复为默认值,这可能是错误的。

如果您正在读取BOM编码的CSV文件,则需要这样做。

纯UTF-8编码无法处理BOM表头,因此在将数据视为UTF-8之前,您需要阅读并跳过该部分。这种表示法就是Ruby表达这一要求的方式。