解決したいこと
1つのZipファイルに圧縮して、そのファイルをダウンロードしたときに以下のエラーが発生します。
invalid byte sequence in UTF-8
このエラーに対して、文字列からUTF-8として不正な文字を除去しなければならないので、encodeメソッドでUTF-8からUTF-8への変換を行いましたが、表示させたい文字列が表示されません。画像のようになります。
file_name.encode!("UTF-8", "UTF-8", invalid: :replace, replace: "")
この問題に対してなにか解決策はありますでしょうか?
ご教示いただけると嬉しいです。
該当のソースコード
Zip::File.open_buffer(obj) do |zip| zip.each do |entry| ext = File.extname(entry.name) file_name = File.basename(entry.name) # file_name.encode!("UTF-8", "UTF-8", invalid: :replace) next if ext.blank? || file_name.count(".") > 1 dir = File.join(dir_name, File.dirname(entry.name)) FileUtils.mkpath(dir.to_s) zip.extract(entry, dir + ".txt" || ".jpg" || ".csv") {true} file_name.force_encoding("UTF-8") new_file_name = "#{dir_name}/#{file_name}" new_file_name.force_encoding("UTF-8") File.rename(dir + ".txt" || ".jpg" || ".csv", new_file_name) @input_dir << new_file_name end end Zip::OutputStream.open(zip_file.path) do |zip_data| @input_dir.each do |file| zip_data.put_next_entry(file) zip_data.write(File.read(file.to_s)) end end
開発環境
mac OS Catarina 10.15.7
ruby "2.6.3"