首页 > 解决方案 > Ruby 中的 CSV.open 中的 rb:bom|utf-8 是什么意思?

问题描述

中的意思是什么'rb:bom|utf-8'

CSV.open(csv_name, 'rb:bom|utf-8', headers: true, return_headers: true) do |csv|

我可以理解:

  1. r意思是读
  2. bom是一种文件格式,\xEF\xBB\xBF在文件的开头表示字节顺序。
  3. utf-8是一种文件格式

但:

  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

标签: rubycsvbyte-order-mark

解决方案


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

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

以二进制r模式(b_bomutf-8

BOM 标记可用于检测文件是 UTF-8 还是 UTF-16,如果是 UTF-16,无论是小端还是大端 UTF-16。还有一个用于 UTF-32 的 BOM 标记,但 Ruby 目前还不支持 UTF-32。BOM 标记只是 Unicode 标准中的一个特殊保留字节序列,仅用于检测文件的编码,它必须是该文件的第一个“字符”。它被推荐并通常用于 UTF-16,因为它存在两种不同的变体,它对于 UTF-8 是可选的,并且通常如果文件是 Unicode 但没有 BOM 标记,则假定它是 UTF-8。


推荐阅读