编码::未定义转换错误:从 ASCII-8BIT "xE4"到 UTF-8



我试图用Net::HTTP获取csv文件。

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

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

Nationalit xE4t;改变0 - 5

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

chardet gem告诉我内容是ISO-8859-2。但转化为UTF-8是行不通的。

在普通文本编辑器中打开后,我看到它是正常编码的

你可以选择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

但是这会使你在。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

最新更新