ruby - 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|
我可以理解:
r
意思是读bom
是一种文件格式,\xEF\xBB\xBF
在文件的开头表示字节顺序。utf-8
是一种文件格式
但:
- 我不知道它们是如何组合在一起的,为什么需要编写所有这些来读取 csv
- 我正在努力寻找这方面的文档。它似乎没有记录在
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
解决方案
(接受的答案不正确但不完整)
rb:bom|utf-8
转换为人类可读的句子意味着:
以二进制r
模式(b
_bom
utf-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。
推荐阅读
- r - 通过 Y 列的第一个字母显示 X 列的平均值。结果令人困惑
- asp.net - 即使在 asp.net core razor 页面中选中,复选框列表也会返回 false
- python-3.x - 无法从“google.cloud”(未知位置)导入名称“dataproc_v1”
- regex - 如何使用 RewriteBase 将 `localhost` 更改为 `localhost/subdir`?
- java - 有没有办法在 Spring RSocket 中查看 REQUEST_N 交换
- linux - 将 Ubuntu 中不存在的命令映射到现有命令
- c# - 将列表中每一项的值提交给控制器(MVC)
- c++ - 如何将字节从 uint64_t 转换为 double?
- php - 循环不会在返回时停止?
- typescript - Deno logger FileHandler 不写入文件