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

时间:2012-07-23 17:11:39

标签: ruby-on-rails ruby

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

以下是代码:

`write': "\xB6" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)

感谢您的帮助

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

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

1 个答案:

答案 0 :(得分:2)

你可能也可以通过传递

来完成它
:output_encoding => "binary"

File.open,我认为它可能与模式'wb'做同样的事情,也许更清楚。但很好找出'wb':)。

是的,在知道字符编码的ruby 1.9中,你经常需要告诉你想要的编码,包括“空编码”'二进制'。

Rails可能会将Encoding.default_external设置为UTF-8,File正在使用Encoding.default_external,这可能就是rails vs not-rails产生影响的原因。

ruby​​ 1.9中的编码问题肯定会非常快速地混淆,很多通常隐藏的状态会影响到发生的事情。