编码:: UndefinedConversionError:“\\ XE4”从ASCII-8BIT为

2019-09-02 04:41发布

我试图获取这个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文件后,我得到了一些奇怪的输出。

国籍的\ xE4t;阿尔特0-5

我试图把它编码成UTF-8,但得到了错误Encoding::UndefinedConversionError: "\xE4" from ASCII-8BIT to UTF-8

该rchardet宝石tolds我的内容是ISO-8859-2 。 但转换为UTF-8将无法正常工作。

后在一个正常的文本编辑打开它,我看到了正常的编码。

Answer 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文件

如果你是致命确保您始终将使用该网址作为输入,该文件将始终保持这种编码,你可以做

# 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

但是,这只会工作到这个文件。



文章来源: Encoding::UndefinedConversionError: “\\xE4” from ASCII-8BIT to UTF-8