Кодировка:: UndefinedConversionError: "xE4 " от ASCII-8BIT до UTF-8
Я пытался достать это 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 снова, я получил некоторые странные выходные данные.
NationalitxE4t; Alter 0-5
Я попытался закодировать его в UTF-8, но получил ошибку Encoding::UndefinedConversionError: "xE4" from ASCII-8BIT to UTF-8
на rchardet Гэм говорится Мне содержание ISO-8859-2
. Но преобразовать в UTF-8
не будет работать.
после открытия его в обычном Texteditor, я вижу его нормальная кодировка.
1 ответов
вы можете пойти с 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
но это заставит вас потерять некоторую acentuation в вашем .файл 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
но это будет работать только с этим файлом.