def guess_textual_header_encoding(fh): """Read the SEG Y card image header, also known as the textual header Args: fh: A file-like object open in binary mode positioned such that the beginning of the textual header will be the next byte to read. Returns: Either 'cp037' for EBCDIC or 'ascii' for ASCII. """ with restored_position_seek(fh, 0): raw_header = fh.read(TEXTUAL_HEADER_NUM_BYTES) encoding = guess_encoding(raw_header) return encoding
def test_guess_encoding_inconclusive(self): assert guess_encoding( bytes(COMMON_ASCII_CHARS) + bytes(5) + bytes(COMMON_EBCDIC_CHARS)) == None
def test_guess_encoding_mostly_ebcdic(self): assert guess_encoding( bytes(COMMON_ASCII_CHARS) + bytes(COMMON_EBCDIC_CHARS) + bytes(COMMON_EBCDIC_CHARS)) == EBCDIC
def test_guess_encoding_all_null_is_ascii(self): assert guess_encoding(bytes(5)) == ASCII
def test_guess_encoding_empty_is_none(self): assert guess_encoding(b'') is None
def test_guess_encoding_ebcdic(self): assert guess_encoding(bytes(COMMON_EBCDIC_CHARS)) == EBCDIC
def test_guess_encoding_ascii(self): assert guess_encoding(bytes(COMMON_ASCII_CHARS)) == ASCII
def guess_textual_header_encoding(fh): fh.seek(0) raw_header = fh.read(TEXTUAL_HEADER_NUM_BYTES) encoding = guess_encoding(raw_header) return encoding
def test_guess_encoding_mostly_ebcdic(self): assert guess_encoding(bytes(COMMON_ASCII_CHARS) + bytes(COMMON_EBCDIC_CHARS) + bytes(COMMON_EBCDIC_CHARS)) == EBCDIC
def test_guess_encoding_inconclusive(self): assert guess_encoding(bytes(COMMON_ASCII_CHARS) + bytes(5) + bytes(COMMON_EBCDIC_CHARS)) == None