无法读取文件字符集 utf-16le,除非放入 ruby



我需要在Ruby中读取外部文件。运行file -i本地显示 text/plain; charset=utf-16le

我在带有shipater' t'的红宝石CSV中打开它,一行显示为: <CSV::Row "xFFxFECx00ax00nx00dx00ix00dx00ax00tx00ex00 x00nx00u ...

row.to_s产生x000x000x000x001x00tx00Ex00Dx00O

运行puts row正确显示数据: 0001 EDOARDO A ...(在VIM和Libreoffice计算中,值也明确显示(

有什么建议如何获取Ruby中的数据?我尝试了使用external_encoding: 'utf-16le', internal_encoding: "utf-8"等打开CSV的各种组合,但是puts是唯一给出可清晰值的东西

它还说Ruby CSV中的ASCII-8位。 <#CSV io_type:StringIO encoding:ASCII-8BIT lineno:0 col_sep:"\t" row_sep:"n" quote_char:""" headers:true>

文件本身是作为XLS文件生产的。我在此处上传了一个编辑版本(编辑I GVIM(

这对我来说很好:

require 'csv'
CSV.foreach("file.xls", encoding: "UTF-16LE:UTF-8", col_sep: "t") do |row|
  puts row.inspect
end

这将产生以下输出:

["Candidate number", "First name", "Last name", "Date of birth", "Preparation centre", "Result", "Score", "Reading and Writing", "Listening", "Speaking", "Result enquiry", "Raised on", "Raised by", "Enquiry status", "Withdrawn on", "Withdrawn by", nil]
["0001", "EDOARDO", "AGNEW", "20/01/2001", "Fondazione Istituto Massimo", "RY5-G8-Y2", "-", nil, nil, nil, "-", "00000000", nil, nil, "00000000", nil, nil]

您可以看到每一行是文档中每一列的一系列字符串。

问题是我正在从纸条附件中阅读,该附件需要在保存之前具有编码集(覆盖(。

在模型中添加S3_headers的工作:

 has_attached_file :attachment, s3_headers: lambda { |attachment|
                                  { 
                                    'content-Type' => 'text/csv; charset=utf-16le'
                                  }
                                }

感谢朱利安(Julien(将问题与纸卷附件有关(该解决方案可直接读取文件(

最新更新