字符串长度多显示一个字符 - 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 对此进行了更详细的介绍。
我正在处理用户上传的 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 对此进行了更详细的介绍。