5

ディレクトリ内のファイルのリストを生成したいと思います。一部のファイル名には漢字が含まれています。

例: [试验].Test.txt

次のコードを使用しています。

require 'find'
dirs = ["TestDir"]
for dir in dirs
    Find.find(dir) do |path|
    if FileTest.directory?(path)
    else
        p path
    end
    end
end

スクリプトを実行すると、ファイルのリストが生成されますが、漢字はエスケープされます (バックスラッシュとそれに続く数字に置き換えられます)。上記のファイル名の例を使用すると、次のようになります。

「TestDir/[试验].Test.txt」の代わりに「TestDir/[\312\324\321\351]Test.txt」。

漢字を出力するようにスクリプトをどのように変更できますか?

4

2 に答える 2

4

Ruby は、コード内で Unicode を扱っていることを認識する必要があります。以下のように、KCODE を使用して適切な文字エンコーディングを設定します。

$KCODE = 'utf-8'

漢字はutf-8で十分だと思います。

于 2008-11-21T18:31:59.077 に答える
1

次のコードはより洗練されており、「検索」は必要ありません。作業ディレクトリが何であれ(またはあなたが入れたディレクトリ)にファイルのリスト(ディレクトリではない)を生成します。

Dir.entries(Dir.pwd).each do |x|
  p x.encode('UTF-8') unless FileTest.directory?(x)  
end 

そして、再帰的に 1 レベル掘り下げるには、次のようにします。

Dir.glob('*/*').each do |x|
  p x.encode('UTF-8') unless FileTest.directory?(x)  
end

それを完全にダウンさせる方法があると確信していDir.glob('**/*')ますが、私の記憶が正しければ、ファイルシステム全体を通過します。

于 2012-06-07T14:35:43.427 に答える