@@ -515,7 +515,7 @@ def __repr__(self):
515515 result .append ('>' )
516516 return '' .join (result )
517517
518- def FileHeader (self , zip64 = None , metadata_encoding = None ):
518+ def FileHeader (self , zip64 = None ):
519519 """Return the per-file header as a bytes object.
520520
521521 When the optional zip64 arg is None rather than a bool, we will
@@ -557,17 +557,19 @@ def FileHeader(self, zip64=None, metadata_encoding=None):
557557
558558 self .extract_version = max (min_version , self .extract_version )
559559 self .create_version = max (min_version , self .create_version )
560- filename , flag_bits = self ._encodeFilenameFlags (metadata_encoding )
560+ filename , flag_bits = self ._encodeFilenameFlags ()
561561 header = struct .pack (structFileHeader , stringFileHeader ,
562562 self .extract_version , self .reserved , flag_bits ,
563563 self .compress_type , dostime , dosdate , CRC ,
564564 compress_size , file_size ,
565565 len (filename ), len (extra ))
566566 return header + filename + extra
567567
568- def _encodeFilenameFlags (self , encoding ):
569- if not encoding or self .flag_bits & _MASK_UTF_FILENAME :
568+ def _encodeFilenameFlags (self ):
569+ if self .flag_bits & _MASK_UTF_FILENAME :
570570 encoding = 'ascii'
571+ else :
572+ encoding = 'cp437'
571573 try :
572574 return self .filename .encode (encoding ), self .flag_bits & ~ _MASK_UTF_FILENAME
573575 except UnicodeEncodeError :
@@ -1372,7 +1374,7 @@ def close(self):
13721374 # Preserve current position in file
13731375 self ._zipfile .start_dir = self ._fileobj .tell ()
13741376 self ._fileobj .seek (self ._zinfo .header_offset )
1375- self ._fileobj .write (self ._zinfo .FileHeader (self ._zip64 , self . _zipfile . metadata_encoding ))
1377+ self ._fileobj .write (self ._zinfo .FileHeader (self ._zip64 ))
13761378 self ._fileobj .seek (self ._zipfile .start_dir )
13771379
13781380 # Successfully written: Add file to our caches
@@ -1573,8 +1575,6 @@ def _RealGetContents(self):
15731575 else :
15741576 # Historical ZIP filename encoding
15751577 filename = filename .decode (self .metadata_encoding or 'cp437' )
1576- if not self .metadata_encoding and not filename .isascii ():
1577- self .metadata_encoding = "cp437"
15781578 # Create ZipInfo instance to store file information
15791579 x = ZipInfo (filename )
15801580 x .extra = fp .read (centdir [_CD_EXTRA_FIELD_LENGTH ])
@@ -1834,7 +1834,7 @@ def _open_to_write(self, zinfo, force_zip64=False):
18341834 self ._writecheck (zinfo )
18351835 self ._didModify = True
18361836
1837- self .fp .write (zinfo .FileHeader (zip64 , self . metadata_encoding ))
1837+ self .fp .write (zinfo .FileHeader (zip64 ))
18381838
18391839 self ._writing = True
18401840 return _ZipWriteFile (self , zinfo , zip64 )
@@ -2066,7 +2066,7 @@ def mkdir(self, zinfo_or_directory_name, mode=511):
20662066
20672067 self .filelist .append (zinfo )
20682068 self .NameToInfo [zinfo .filename ] = zinfo
2069- self .fp .write (zinfo .FileHeader (False , self . metadata_encoding ))
2069+ self .fp .write (zinfo .FileHeader (False ))
20702070 self .start_dir = self .fp .tell ()
20712071
20722072 def __del__ (self ):
@@ -2137,7 +2137,7 @@ def _write_end_record(self):
21372137
21382138 extract_version = max (min_version , zinfo .extract_version )
21392139 create_version = max (min_version , zinfo .create_version )
2140- filename , flag_bits = zinfo ._encodeFilenameFlags (self . metadata_encoding )
2140+ filename , flag_bits = zinfo ._encodeFilenameFlags ()
21412141 centdir = struct .pack (structCentralDir ,
21422142 stringCentralDir , create_version ,
21432143 zinfo .create_system , extract_version , zinfo .reserved ,
0 commit comments