12

でこのCSVファイルを取得しようとしまし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;Alter 0-5

UTF-8にエンコードしようとしましたが、エラーが発生しましたEncoding::UndefinedConversionError: "\xE4" from ASCII-8BIT to UTF-8

rchardet gemは、コンテンツがISO-8859-2. しかし、変換は機能しUTF-8ません。

通常のTexteditorで開いた後、通常のエンコードが表示されます。

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 に答える