编码未定义的转换错误 - Ruby on Rails,写入错误

Jas*_*rwe 11 ruby ruby-on-rails

所以我试图从网站下载一个zip文件并将该数据放入表中.下载以前一直在工作,但突然间,它已不再存在了.我从ASCII-8BIT到UTF-8(Encoding :: UndefinedConversionError)"问题"得到一个"`write":"\ xB6".很奇怪,自从我上次运行脚本以来没有任何改变.以下是出现问题的代码部分.我正在使用一个gem,它允许我解析zip文件中的DBF文件.

这是代码:

`write': "\xB6" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

更新:显然我在轨道内运行.我在rails环境之外运行脚本,它工作正常.所以Rails在某种程度上干扰了写入过程.

更新2:已解决 - 我将"w"更改为"wb"显然这是由rails 3+引起的.我之前没有尝试过这个.希望这有助于其他人.

jro*_*ind 3

你可能也可以通过传递来完成

:output_encoding => "binary"
Run Code Online (Sandbox Code Playgroud)

to File.open,我认为它会与模式“wb”做同样的事情,也许更清楚。但弄清楚“wb”干得不错:)。

是的,在支持 char 编码的 ruby​​ 1.9 中,您经常需要告知有关所需编码的不同信息,包括“空编码”“二进制”。

Rails 可能将 设定Encoding.default_external为 UTF-8,并File使用Encoding.default_external,这可能就是 Rails 与 not-rails 产生差异的原因。

ruby 1.9 中的编码问题肯定会很快变得非常混乱,许多通常隐藏的状态可能会影响到底发生的事情。