我尝试解析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
来做这件事,但没有帮助
答案 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'的猜测是错误的,不幸的是它会给你带来胡言乱语。