ファイル名に中国語の文字を含むRubyを使用した再帰的なディレクトリ一覧

StackOverflow https://stackoverflow.com/questions/309539

質問

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

eg:[试验]。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 / [\ 312 \ 324 \ 321 \ 351] Test.txt" " TestDir / [试验]。Test.txt"の代わりに。

スクリプトを変更して漢字を出力するにはどうすればよいですか

役に立ちましたか?

解決

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

$KCODE = 'utf-8'

utf-8は中国語の文字には十分だと思います。

他のヒント

次のコードはよりエレガントで、「検索」を必要としません。作業ディレクトリ(またはディレクトリ)にあるファイルのリスト(ディレクトリではない)を作成します。

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( '** / *')は、覚えていればファイルシステム全体を通過します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top