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?'

コピーしているディレクトリ内に、いくつかの特殊文字を含む別のディレクトリがあります。しかし、cpシェルコマンドを実行すると問題なく動作するため、Rubyで対処する必要があると思います。

Ruby にこの例外を無視させ、ディレクトリのコピーを終了させる方法のアイデアはありますか?

ありがとう。

4

2 に答える 2

0
# encoding: UTF-8 

Rubyスクリプトの上に。

https://github.com/m-ryan/magic_encodingは、Ruby のエンコーディングの問題のほとんどを解決します!

于 2013-01-09T20:35:19.880 に答える
0

上記# encoding: ...は、問題のデータがスクリプトのソースから取得された場合にのみ機能しますが、ここではそうではありません。

ディレクトリの名前を外部エンコーディング (プログラムの環境から継承された UTF-8 である可能性が最も高い) で表すことができないため、例外が発生します。

zed_0xff が指摘しているように、これを解決する 1 つの方法はEncoding.default_external = 'BINARY'(これは のエイリアスです'ASCII-8BIT')。

もう 1 つの方法は、プログラム全体をバイナリ ロケールで実行することですLANG=C ruby doit.rb

Ruby 1.8 と 1.9 における Unicode の状況を説明する素晴らしいシリーズの一部であるRuby 1.9 の Three Default Encodingsを参照してください。

于 2013-01-14T15:24:15.280 に答える