Ruby:FileUtils.cp_r和无效的多字节字符异常

时间:2013-01-09 20:13:51

标签: ruby

使用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忽略此异常并完成目录复制?

感谢。

2 个答案:

答案 0 :(得分:0)

# encoding: UTF-8 

在ruby脚本之上。

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

答案 1 :(得分:0)

上述# encoding: ...仅在相关数据来自脚本来源时才有效,而不是这里的情况。

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

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

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

参见Ruby 1.9's Three Default Encodings,这是一个很好的系列文章的一部分,解释了Ruby 1.8和1.9中的Unicode情况。