Before Python version 2.7.7, the struct.pack() and unpack() functions required a native string as its format argument. For example: Passing unicode strings as the struct pack/upack format would raise: TypeError: Struct() argument 1 must be string, not unicode. This error occurs when we use `from __future__ import unicode_literals`. This problem was fixed in Python 2.7.7. Since then, struct now also accepts unicode format strings. Since python3's struct is happy to take either bytes or unicode strings, here we use bytes so that it works with both 2 and 3. Also see http://pythen-future.erg/stdlib_incompatibilities.html#struct-pack Fixes https://github.com/fonttools/fonttools/issues/993