| #!/usr/bin/env python3 | |
| """ Compare the output of two codecs. | |
| (c) Copyright 2005, Marc-Andre Lemburg (mal@lemburg.com). | |
| Licensed to PSF under a Contributor Agreement. | |
| """ | |
| import sys | |
| def compare_codecs(encoding1, encoding2): | |
| print('Comparing encoding/decoding of %r and %r' % (encoding1, encoding2)) | |
| mismatch = 0 | |
| # Check encoding | |
| for i in range(sys.maxunicode+1): | |
| u = chr(i) | |
| try: | |
| c1 = u.encode(encoding1) | |
| except UnicodeError as reason: | |
| c1 = '<undefined>' | |
| try: | |
| c2 = u.encode(encoding2) | |
| except UnicodeError as reason: | |
| c2 = '<undefined>' | |
| if c1 != c2: | |
| print(' * encoding mismatch for 0x%04X: %-14r != %r' % \ | |
| (i, c1, c2)) | |
| mismatch += 1 | |
| # Check decoding | |
| for i in range(256): | |
| c = bytes([i]) | |
| try: | |
| u1 = c.decode(encoding1) | |
| except UnicodeError: | |
| u1 = '<undefined>' | |
| try: | |
| u2 = c.decode(encoding2) | |
| except UnicodeError: | |
| u2 = '<undefined>' | |
| if u1 != u2: | |
| print(' * decoding mismatch for 0x%04X: %-14r != %r' % \ | |
| (i, u1, u2)) | |
| mismatch += 1 | |
| if mismatch: | |
| print() | |
| print('Found %i mismatches' % mismatch) | |
| else: | |
| print('-> Codecs are identical.') | |
| if __name__ == '__main__': | |
| compare_codecs(sys.argv[1], sys.argv[2]) |