If really the plugin has to do it (vs. "strings returned by a plugin are normalized by Calibre"), be aware that there are
some caveats lurking here:
- You’ll probably want use the NFC (Normalization Form Canonical Composition), as in unicodedata.normalize('NFC', string).
- Personally, I’d advise against using NFKC (the "compatibility" composition), because it breaks too much, like super- and subscripts, Roman numerals. Even the angstrom sign (Å) will silently be converted to the Swedish letter (Å).
- Be sure the string is complete, i.e. not starting with a combining character or ending with a joining one.
- Some more info on Wikipedia and unicode.org.