ファイル名に中国語の文字を含むRubyを使用した再帰的なディレクトリ一覧
-
08-07-2019 - |
質問
ディレクトリ内のファイルのリストを生成したいと思います。一部のファイル名には中国語の文字が含まれています。
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( '** / *')
は、覚えていればファイルシステム全体を通過します。
所属していません StackOverflow