質問するログイン新規登録
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

Q&A

1回答

316閲覧

Python ZIPファイル圧縮時に圧縮対象のファイルが展開時文字化けする。

ngh_orange

総合スコア17

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

0グッド

0クリップ

投稿2025/07/16 13:50

編集2025/07/17 23:54

0

0

実現したいこと

サーバーで圧縮した日本語が含まれるPDFファイルをZIPにまとめ、正常にクライアントが解凍できるようにしたい。

発生している問題・分からないこと

PDFファイルをZIPにまとめる際、生成されたZIPファイルを解凍すると中身のPDFファイルの日本語が文字化けする(数字は正常)

エラーメッセージ

error

1エラーメッセージはありません。 2ツールには単体のPDFをダウンロードする機能もあるのですが、単体の方では問題なく日本語になっています。 3

該当のソースコード

Python

1def create_zip_with_logs(zip_path, file_paths, log_lines): 2 with zipfile.ZipFile(zip_path, 'w', compression=zipfile.ZIP_DEFLATED) as zipf: 3 # PDFファイルを追加 4 for file_path in file_paths: 5 arcname = os.path.basename(file_path) 6 print(f"[DEBUG] アーカイブ名: {arcname}") 7 8 zip_info = zipfile.ZipInfo(arcname) 9 zip_info.compress_type = zipfile.ZIP_DEFLATED 10 11 # ファイルのタイムスタンプを設定 12 stat = os.stat(file_path) 13 zip_info.date_time = datetime.fromtimestamp(stat.st_mtime).timetuple()[:6] 14 15 with open(file_path, 'rb') as f: 16 zipf.writestr(zip_info, f.read())
特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

ChatGPTやClaudeで投げてみても解決しませんでした。
文字コードの設定周りがかわりました。

補足

開発環境:Windows
本番環境:Ubuntu
クライアント:Windows GoogleChrome

文字化け環境
開発環境→Windows クライアント→Windows

zip_pathには作成したZIPファイルのパス
file_pathsには圧縮予定のファイル(今回はPDF)のパス
が代入されます。

###追加補足
ご回答、コメントの方ありがとうございます。
わかりづらかった部分があるかと思いますので追加で補足させていただきます。
文字化けするのはZipに圧縮したPDFの「ファイル名」です。
念の為圧縮前にprintでファイル名を確認しているのですがそこまではコンソールに日本語でちゃんと表示されます。
圧縮し、WindowsのChrome経由でダウンロードしたら文字化けしてしまう。
という形です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FKM

2025/07/17 06:41 編集

PDFじゃなくて、普通のテキストで試しても文字化けするなら間違いなく圧縮ツール側のエンコードの問題ですね。 そっちで検索したら山のように回答が出てきたとだけ言っておきます。
tabuu

2025/07/17 23:10

>中身のPDFファイルの日本語が文字化けする 文字化けするのはPDFファイルの中身ですか?ファイル名ですか?
katsuko

2025/07/17 23:38

> ツールには単体のPDFをダウンロードする機能もあるのですが、単体の方では問題なく日本語になっています。 これは、本当に **同じやり方** で確認していますか? 例えば、単体の方は(ブラウザからリンクを辿って)ブラウザの埋め込みビュアーで見ていて、zipの中身は(エクスプローラでダブルクリックで)AdobeReaderで見ている、なんてことはないですか。
bsdfan

2025/07/18 00:15

使っている python のバージョンと、展開につかっているツールについて記載してください。 python 3 の zipfile では、日本語ファイル名はUTF-8でエンコードされて、UTF-8のフラグがたった形で格納されているはずです。python 2 を使っていたり、Windows側で UTF-8 に対応していないツールを使っていないでしょうか?
guest

回答1

0

はい、この問題はZIPファイル内のファイル名(特に日本語を含む場合)のエンコーディングに関する非常によくある問題です。zipfileモジュールはデフォルトでファイル名にCP437という古い文字コードを使用しようとするため、日本語が文字化けします。 ●●●●

投稿2025/07/17 10:05

Janet729Shires

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問