Skip to content

Instantly share code, notes, and snippets.

@arrowtype
Last active October 8, 2021 13:15
Show Gist options
  • Save arrowtype/713dad14fe9a574d58d1aab61ba9b2f0 to your computer and use it in GitHub Desktop.
Save arrowtype/713dad14fe9a574d58d1aab61ba9b2f0 to your computer and use it in GitHub Desktop.
The basics of working with unicode values in Python

Unicode values in Python

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
@arrowtype
Copy link
Author

Note to self: If you’re converting a hex string like '0x000D' to an int...

You can use int() on a string with the prefix 0x, but you need to tell it to use 0 as the base:

>>> int('0x51', 0)
81

source

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment