duri0214 / portfolio

0 stars 1 forks source link

取り込みCSV.zip のcodec #88

Open duri0214 opened 2 months ago

duri0214 commented 2 months ago

概要

問題は、zipファイル内の個々のファイル名がASCIIの範囲外の文字を含む可能性があるということです。これが UnicodeEncodeError を引き起こしています。 Zipファイルは複数のファイルを含むことができ、各ファイルはその独自の名前を持っています(これはzipファイル自体の名前とは異なります)。その結果、そのファイル名をasciiにエンコードすることができず、ubuntu上で os.makedirs を使用してファイルを解凍したときに UnicodeEncodeError が発生します。

したがって、問題はzipファイル自体の名前ではなく(それは確かにasciiの範囲内にあります)、zipファイルを抽出しようとするときに困難に直面する可能性があるzipファイル内の個々のファイル名です。

エラーが発生するのは z.extract(info, path=str(upload_folder)) の行で、ここでファイルの抽出が行われています。この行は、zipファイルからファイルを解凍し、upload_folder の位置にそれを保存しようとしています。しかし、この操作は特定のファイルの名前がasciiエンコーディングに適合しない場合には失敗します。これは、os.makedirs がディレクトリを作成するとき、その内部で名前をasciiにエンコードしようとし、これが失敗します。

Windowsで問題が発生しない理由は、WindowsがデフォルトでファイルパスのエンコーディングにUTF-8を使用しており、これはASCIIよりもはるかに広範な文字セットをサポートしているためです。これにより、非ASCII文字を含むファイル名でもファイルの抽出が可能になります。しかし、Ubuntuでは、ASCIIをデフォルトのシステムエンコーディングとして使用しているため、この問題が発生します。

解決策の1つは、ZIPファイル内の各ファイル名がASCII文字のみを含むことを確認するか、ASCII文字に変換可能な状態にすることです。

image image