编码:: UndefinedConversionError:"\ xE4"从ASCII-8BIT到UTF-8

Min*_*ker 11 ruby encoding ruby-on-rails

我试图获取这个CSV-文件Net::HTTP.

File.open(file, "w:UTF-8") do |f|
  content = Net::HTTP.get_response(URI.parse(url)).body
  f.write(content)
end
Run Code Online (Sandbox Code Playgroud)

再次读取我的本地csv文件后,我得到了一些奇怪的输出.

Nationalit\xE4t;改0-5

我试图将其编码为UTF-8,但得到了错误 Encoding::UndefinedConversionError: "\xE4" from ASCII-8BIT to UTF-8

rchardet宝石tolds我的内容ISO-8859-2.但转换为UTF-8无效.

在正常的Texteditor中打开后,我看到它是正常编码的.

fot*_*nus 19

你可以选择force_encoding:

require 'net/http'

url = "http://data.linz.gv.at/katalog/population/abstammung/2012/auslg_2012.csv"
File.open('output', "w:UTF-8") do |f|
  content = Net::HTTP.get_response(URI.parse(url)).body
  f.write(content.force_encoding("UTF-8"))
end
Run Code Online (Sandbox Code Playgroud)

但这会让你在.cvs文件中失去一些重要性

如果你确定你总是会使用这个URL作为输入,并且文件将始终保持这种编码,你可以这样做

# encoding: utf-8
require 'net/http'

url = "http://data.linz.gv.at/katalog/population/abstammung/2012/auslg_2012.csv"
File.open('output', "w:UTF-8") do |f|
  content = Net::HTTP.get_response(URI.parse(url)).body
  f.write(content.encode("UTF-8", "ISO-8859-15"))
end
Run Code Online (Sandbox Code Playgroud)

但这只适用于此文件.