About normalizing back to NFC? This part is only hit on OS X, and I'm not sure how python works there. I presumed the strings are passed around in NFC and only converted to NFD when written to disk, but I can't really remember why I made that assumption.
Either way, the character count is different between them, and I think this is needed to take care of windows too.