所以我试图从网站下载一个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+引起的。我之前没有尝试过这个。希望这有助于其他人。
答案 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中的编码问题肯定会非常快速地混淆,很多通常隐藏的状态会影响到发生的事情。