Python3でcp932なzipファイルを作りたい
前提
やりたいこと
仕事の都合で、どうしてもcp932な、他の文字エンコーディングを考慮しない古い方式の、zipファイルを作りたい
やったこと
モンキーパッチをmockで切り替えられるように書いてみた
code:zipcp932patch.py
"""
Py3でcp932エンコードされたzipファイルを作成するパッチ
利用コード例::
>> from zipfile import ZipFile
>> from zipcp932patch import zipcp932patch
>> with zipcp932patch, ZipFile('output.zip', 'w') as zf:
... zf.write('日本語.txt')
...
"""
import unittest.mock
def _patch_encodeFilenameFlags(self):
try:
return self.filename.encode('ascii'), self.flag_bits
except UnicodeEncodeError:
return self.filename.encode('cp932'), self.flag_bits
zipcp932patch = unittest.mock.patch(
'zipfile.ZipInfo._encodeFilenameFlags',
_patch_encodeFilenameFlags)
参考
Windowsのエクスプローラーを使ってのzip解凍はShift-JIS(cp932)で解釈するため、zipfileモジュールを使った圧縮(UTF-8)だと、文字化けが発生する。
shimizukawa.iconあれ、エクスプローラーそうだっけ?
zipfileモジュールを直接いじる必要がある。
shimizukawa.iconまじかー