Ruby/Rails CSV解析,UTF-8中的无效字节序列

rog*_*iog 44 ruby csv ruby-on-rails utf-8

我正在尝试解析从Excel电子表格生成的CSV文件.

这是我的代码

require 'csv'
file = File.open("input_file")
csv = CSV.parse(file)
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误

ArgumentError: invalid byte sequence in UTF-8
Run Code Online (Sandbox Code Playgroud)

我认为错误是因为Excel将文件编码到ISO 8859-1 (Latin-1)而不是编入UTF-8

请有人帮我解决这个问题

提前致谢.

Lin*_*ios 66

您需要告诉Ruby该文件是ISO-8859-1.将文件打开行更改为:

file=File.open("input_file", "r:ISO-8859-1")
Run Code Online (Sandbox Code Playgroud)

第二个参数告诉Ruby使用编码ISO-8859-1打开只读.

  • 像冠军一样工作。在找到这个答案之前,我正在做一个`iconv -f ISO-8859-1 -t utf-8 oldfilename> newfilename`。 (2认同)

小智 16

使用encoding选项指定编码:

CSV.foreach(file.path, headers: true, encoding:'iso-8859-1:utf-8') do |row|
  ...
end
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢为`encoding:`显式声明关键字参数+1 (2认同)

kix*_*orz 12

您可以在文件模式参数中直接提供源编码:

CSV.foreach( "file.csv", "r:windows-1250" ) do |row|
   <your code>
end
Run Code Online (Sandbox Code Playgroud)

  • 这适用于Ruby 2.1.5,但你必须做`编码:'iso-8859-1'`而不是``r:windows-1250"`. (8认同)