2

使用 FileUtils.cp_r 时出现以下异常:

 invalid multibyte character
 /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/fileutils.rb:1503:in `descendant_diretory?'

在我正在复制的目录中,还有另一个带有一些特殊字符的目录。但我认为 Ruby 应该处理它,因为运行 cp shell 命令可以正常工作。

关于如何让 Ruby 忽略此异常并完成目录复制的任何想法?

谢谢。

4

2 回答 2

0
# encoding: UTF-8 

在你的红宝石脚本之上。

https://github.com/m-ryan/magic_encoding解决了 ruby​​ 的大部分编码问题!

于 2013-01-09T20:35:19.880 回答
0

# encoding: ...仅当相关数据来自脚本源时,上述内容才有效,此处并非如此。

发生异常是因为目录的名称不能用外部编码表示(很可能是 UTF-8,继承自程序环境)。

正如 zed_0xff 指出的那样,解决此问题的一种方法是Encoding.default_external = 'BINARY'(这是 的别名'ASCII-8BIT')。

另一种方法是在二进制语言环境中运行整个程序:LANG=C ruby doit.rb.

请参阅Ruby 1.9 的三种默认编码,这是解释 Ruby 1.8 和 1.9 中 Unicode 情况的精彩系列的一部分。

于 2013-01-14T15:24:15.280 回答