Unicodes can either be integers (“A” is 65
, “B” is 66
, etc) or hex (“A” is 0x41
, “B” is 0x42
, etc).
When scripting with RoboFont or FontTools, a hard thing at first is that different styles come up in different contexts. For example, integers will often be used in scripts, but hex values are shown in UIs and in the TTX output of cmap
(the table that maps unicode values to glyphs). So, it's helpful to know how to go between them to do different types of work.
To go from a string to an unicode integer, you can use ord(), like:
>>> ord("A")
65
To go from an integer to a hex, you can use hex(), like:
>>> hex(65)
'0x41'
To go from an integer or hex to a string, you can use chr(), like:
>>> chr(0x41)
'A'
>>> chr(65)
'A'
To go from a hex value to an integer, use int()
, like:
>>> int(0x0083)
131
>>> int(0x41)
65
Thanks for such helpful additions, everyone! These are great pieces of related advice.