12

我试图.Net::HTTP

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 gem告诉我内容是ISO-8859-2. 但是转换为UTF-8将不起作用。

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

4

1 回答 1

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

但这会使您在 .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

但这仅适用于该文件。

于 2013-05-07T21:24:04.037 回答