rubyでハングル含むファイル名を読むと文字化け
ruby 初心者です
環境は以下の通り
Windows7 64bit
Ruby 2.3.1
状況
rubyでハングル含むファイル名をリネームしたいのですが、
フォルダ内のファイル名を読み込んでputsで表示すると、ハングル文字が「??」に文字化けして、
又、renameを実行するとエラーになります。
ハングル文字化けBJ??になる
Windowsのファイル名
999-BJ쏘이-hkqwer-20211115.mp4
rubyで読み込んだ後、putsで確認するとハングルが文字化けする
999-BJ??-hkqwer-20211115.mp4
質問
ハングル文字の文字化けを直すには、どの様に指定すればよいのでしょうか?
また、.renameする際、何か指定があれば、知りたいです。
補足)
ちなみに、ファイル名が、英数や漢字・かなを含む場合や、
.rb内でファイル名に直接ハングル文字を指定すると、正常にリネーム出来ています。
変更前:999-BJ쏘이-hkqwer-20211115.mp4
変更後:☆korean 259-BJ쏘이-hkqwer-20211115.mp4
補足)
・renameを実行するとエラー
ren2.rb:207:in 'rename': Invalid argument @ rb_file_s_rename - (C:USers/xxxxxx/Desktop/☆korean/999-BJ??-hkqwer-20211115.mp4, C:USers/xxxxxx/Desktop/☆korean/☆korean 259-BJ??-hkqwer-20211115.mp4) (Errno::EINVAL)
ren2.rb:207:in `rename': Invalid argument @ rb_file_s_rename - (C:Users/xxxxxx
/Desktop/☆korean/999-BJ??-hkqwer-20211115.mp4, C:Users/xxxxxx/Desktop/☆korean/
☆korean 259-BJ??-hkqwer-20211115.mp4) (Errno::EINVAL)
・.openにエンコード指定するとエラーになる
Dir.open("#{tr_path}", "rw:sjis:utf-8") do |dir|
ren2.rb:48:in `open': wrong number of arguments (given 2, expected 1) (ArgumentError)
・実行したソース
ruby ren2.rb
# coding: UTF-8
ms_path = "G:\/G_Download\/G_XVIDEOS\/1優良\/☆korean" # 本番用
tr_path = "C:\Users/xxxxxx/Desktop/☆korean" # テスト用
Dir.open("#{tr_path}") do |dir| # テスト用
for tr_name in dir
puts tr_name
#
#
# .と..を読み飛ばす
#
#
if tr_name == "." ||
tr_name == ".." then
next
end
#
# 読み込んだファイル名から抽出した文字s_nameで、本番用フォルダーを検索して、
# あれば「☆korean xxx-」を取得する
#
#
# テスト用文字
#
s_name = "hkqwer"
#
# 保存用フォルダを検索して、類似ファイルが存在したら、☆korean xxx-を取得する
#
Dir.glob("#{ms_path}/*#{s_name}*.mp4") do |x|
if File.basename(x).include?("☆korean ") == true then #☆korean か?
ms_num = File.basename(x)[0,12]
elsif File.basename(x).include?("☆Korean ") == true then #☆Korean か?
ms_num = File.basename(x)[0,12]
else
next
end
#
# 999-を☆korean xxx-で置き換える
#
new_name = tr_name.gsub("999-", ms_num) # 999-を☆korean xxx-へ置き換える
#
# 元ファイルを、新ファイル名に変更する
#
File.rename("#{tr_path}/#{tr_name}", "#{tr_path}/#{new_name}")
end
end
end
お礼
どうもあありがとうございます。 初めての質問だったので、回答してもらっているのに気づきませんでした。 すっきりしました。どうもありがとうございます