Rails将上传文件“\ xDE”从ASCII-8BIT解析为UTF-8

时间:2013-11-10 19:13:17

标签: ruby ruby-on-rails-3

我尝试解析upload * .txt文件并获取一些导入数据库信息。但在保存之前我尝试使用utf-8格式。当我这样做时,我得到错误:

"\xDE" from ASCII-8BIT to UTF-8

第一个文件字符

Import data \xDE\xE4\xE5

解析代码之前

# encoding: utf-8
require "iconv"

class HandlerController < ApplicationController

    def add_report
        utf8_format = "UTF-8"
        file_data = params[:import_file].tempfile.read.encode(utf8_format)
    end
end

P.S。我也试着用iconv来做这件事,但没有帮助

1 个答案:

答案 0 :(得分:3)

在能够成功转换字符串之前,您需要从具有有效内容的已知编码(以及输入和输出的兼容字符)开始。

ASCII-8BIT不会将与Unicode兼容的字符分配给值128..255 - 它无法转换为Unicode。

输入 - 正如你所说的那样是文本 - 很可能是以其他编码开头的。您可以从假设ISO-8859-1(“Latin-1”)开始,这是一个非常常见的编码,虽然您可能有一些其他线索,或者知道文件中期望的字符,在这种情况下您应该尝试其他字符。

我建议你尝试这样的事情:

file_data = params[:import_file].tempfile.read.force_encoding('ISO-8859-1')
utf8_file_data = file_data.encode(utf8_format)

这可能不会给你一个错误,但如果我对'ISO-8859-1'的猜测是错误的,不幸的是它会给你带来胡言乱语。