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

时间:2013-05-07 21:14:52

标签: ruby-on-rails ruby encoding

我尝试使用Net::HTTP获取此CSV-File

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

rchardet宝石告诉我内容是ISO-8859-2。但转换为UTF-8将无效。

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

1 个答案:

答案 0 :(得分:18)

您可以使用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

但这只适用于此档案。