こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在4社経験している、11年目エンジニアです。
この記事では、 Rubyのrubyzipライブラリを使ってzip圧縮したとき
ファイル名が文字化けしてしまったときの解決策をサンプルプログラムをまじえて解説します。
前提条件:実行環境について
実行環境は以下の通りです。
OS | Windows10 |
---|---|
Rubyのバージョン | 2.6.6 |
rubyzipのバージョン | 2.3.0 |
原因と解決策
原因は文字コードがずれているからです。
Rubyの文字コードはUTF-8に対して、WindowsがShift-JISとなっています。
そのため文字化けが起こってしまいました。
解決策はファイル名をShift-JISでエンコードすることです。
別段難しい処理はなく、ほんの少しだけ追加してあげれば解決できます。
ファイル名の文字化けを解決するやり方
ファイル名の文字化けを解決するやり方をサンプルプログラムをまじえて解説します。
以下の書き方だと、日本語のファイル名が文字化けしてしまいました。
1 2 3 4 5 6 7 |
inputs = ["ほげほげ.txt", "テスト.txt"] Zip::File.open(zip_file_name, Zip::File::CREATE) do |zipfile| inputs.each do |input| zipfile.add(input, File.join(zip_folder_path, input)) end end |
しかし、addメソッドの第一引数に下記のように【.encode(“Shift_JIS”)】を追加してあげれば文字化けは解消できます。
1 2 3 4 5 6 7 |
inputs = ["ほげほげ.txt", "テスト.txt"] Zip::File.open(zip_file_name, Zip::File::CREATE) do |zipfile| inputs.each do |input| zipfile.add(input.encode("Shift_JIS"), File.join(zip_folder_path, input)) end end |
上記のプログラムで実行すると、下記画像の通りファイル名が文字化けせず出力されていることが確認できました。
まとめ:エンコードを確認しよう!
以上がRubyのrubyzipでzip圧縮したときファイル名が文字化けしたときの解決策でした!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
コメント