【问题标题】:Encoding::UndefinedConversionError: "\xE4" from ASCII-8BIT to UTF-8编码::UndefinedConversionError: "\xE4" 从 ASCII-8BIT 到 UTF-8
【发布时间】:2013-05-01 23:23:24
【问题描述】:

我尝试使用Net::HTTP 获取此CSV-File。

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 是不行的。

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

【问题讨论】:

    标签: ruby-on-rails ruby encoding


    【解决方案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
    

    但这会让你在你的 .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
    

    但这仅适用于该文件。

    【讨论】:

    • 谢谢。你为我节省了几个小时。
    猜你喜欢
    • 2014-08-26
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    相关资源
    最近更新 更多