Great video by Ned Batchelder: https://www.youtube.com/watch?v=sgHbC6udIqc

General rule:

  • decode to unicode as early as possible (from db, from request, from file)
  • encode to target-encoding as late as possible (to db, to response, to file)


Print a list of unicode characters by code point number. Note that I use utf-8 as my default encoding. In Python 2.7:

print ''.join([x.encode('utf-8') for x in map(unichr, range(0x0107, 0x0187))])