编码:: UndefinedConversionError:“\ xE4”从ASCII-8BIT到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
收到错误Encoding::UndefinedConversionError: "\xE4" from ASCII-8BIT to UTF-8
rchardet gem告诉我内容是ISO-8859-2
。 但转换为UTF-8
将无法正常工作。
在正常的Texteditor中打开后,我看到它是正常编码的。
你可以使用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
但这只适用于此文件。