1

我尝试解析上传 *.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

PS我也尝试这样做,iconv但没有帮助

4

1 回答 1

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”的猜测是错误的,那么不幸的是它会给你胡言乱语。

于 2013-11-10T19:28:37.833 回答