1#!/usr/bin/env python3 2 3""" Compare the output of two codecs. 4 5(c) Copyright 2005, Marc-Andre Lemburg (mal@lemburg.com). 6 7 Licensed to PSF under a Contributor Agreement. 8 9""" 10import sys 11 12def compare_codecs(encoding1, encoding2): 13 14 print('Comparing encoding/decoding of %r and %r' % (encoding1, encoding2)) 15 mismatch = 0 16 # Check encoding 17 for i in range(sys.maxunicode+1): 18 u = chr(i) 19 try: 20 c1 = u.encode(encoding1) 21 except UnicodeError as reason: 22 c1 = '<undefined>' 23 try: 24 c2 = u.encode(encoding2) 25 except UnicodeError as reason: 26 c2 = '<undefined>' 27 if c1 != c2: 28 print(' * encoding mismatch for 0x%04X: %-14r != %r' % \ 29 (i, c1, c2)) 30 mismatch += 1 31 # Check decoding 32 for i in range(256): 33 c = bytes([i]) 34 try: 35 u1 = c.decode(encoding1) 36 except UnicodeError: 37 u1 = '<undefined>' 38 try: 39 u2 = c.decode(encoding2) 40 except UnicodeError: 41 u2 = '<undefined>' 42 if u1 != u2: 43 print(' * decoding mismatch for 0x%04X: %-14r != %r' % \ 44 (i, u1, u2)) 45 mismatch += 1 46 if mismatch: 47 print() 48 print('Found %i mismatches' % mismatch) 49 else: 50 print('-> Codecs are identical.') 51 52if __name__ == '__main__': 53 compare_codecs(sys.argv[1], sys.argv[2]) 54