(cls, pax_headers, type, encoding)
return cls._create_header(info, USTAR_FORMAT, "ascii", "replace") + \
                cls._create_payload(records)
Return a POSIX.1-2008 extended or global header sequence
           that contains a list of keyword, value pairs. The values
           must be strings.
Return a POSIX.1-2008 extended or global header sequence
           that contains a list of keyword, value pairs. The values
           must be strings.
Return a POSIX . 1 - 2008 extended or global header sequence that contains a list of keyword value pairs . The values must be strings .
def _create_pax_generic_header(cls, pax_headers, type, encoding):
        """Return a POSIX.1-2008 extended or global header sequence
           that contains a list of keyword, value pairs. The values
           must be strings.
        """
        # Check if one of the fields contains surrogate characters and thereby
        # forces hdrcharset=BINARY, see _proc_pax() for more information.
        binary = False
        for keyword, value in pax_headers.items():
            try:
                value.encode("utf8", "strict")
            except UnicodeEncodeError:
                binary = True
                break

        records = b""
        if binary:
            # Put the hdrcharset field at the beginning of the header.
            records += b"21 hdrcharset=BINARY\n"

        for keyword, value in pax_headers.items():
            keyword = keyword.encode("utf8")
            if binary:
                # Try to restore the original byte representation of `value'.
                # Needless to say, that the encoding must match the string.
                value = value.encode(encoding, "surrogateescape")
            else:
                value = value.encode("utf8")

            l = len(keyword) + len(value) + 3   # ' ' + '=' + '\n'
            n = p = 0
            while True:
                n = l + len(str(p))
                if n == p:
                    break
                p = n
            records += bytes(str(p), "ascii") + b" " + keyword + b"=" + value + b"\n"

        # We use a hardcoded "././@PaxHeader" name like star does
        # instead of the one that POSIX recommends.
        info = {}
        info["name"] = "././@PaxHeader"
        info["type"] = type
        info["size"] = len(records)
        info["magic"] = POSIX_MAGIC

        # Create pax header + record blocks.
        return cls._create_header(info, USTAR_FORMAT, "ascii", "replace") + \
                cls._create_payload(records)
def _create_pax_generic_header ( cls , pax_headers , type , encoding ) : # Check if one of the fields contains surrogate characters and thereby # forces hdrcharset=BINARY, see _proc_pax() for more information. binary = False for keyword , value in pax_headers . items ( ) : try : value . encode ( "utf8" , "strict" ) except UnicodeEncodeError : binary = True break records = b"" if binary : # Put the hdrcharset field at the beginning of the header. records += b"21 hdrcharset=BINARY\n" for keyword , value in pax_headers . items ( ) : keyword = keyword . encode ( "utf8" ) if binary : # Try to restore the original byte representation of `value'. # Needless to say, that the encoding must match the string. value = value . encode ( encoding , "surrogateescape" ) else : value = value . encode ( "utf8" ) l = len ( keyword ) + len ( value ) + 3 # ' ' + '=' + '\n' n = p = 0 while True : n = l + len ( str ( p ) ) if n == p : break p = n records += bytes ( str ( p ) , "ascii" ) + b" " + keyword + b"=" + value + b"\n" # We use a hardcoded "././@PaxHeader" name like star does # instead of the one that POSIX recommends. info = { } info [ "name" ] = "././@PaxHeader" info [ "type" ] = type info [ "size" ] = len ( records ) info [ "magic" ] = POSIX_MAGIC # Create pax header + record blocks. return cls . _create_header ( info , USTAR_FORMAT , "ascii" , "replace" ) + cls . _create_payload ( records )