使用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忽略此异常并完成目录复制?
感谢。
答案 0 :(得分:0)
答案 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情况。