Consolidates the scattered unicodedata.normalize("NFC", ...) calls introduced
by my earlier filename/path normalization work into a single
documents.utils.normalize_unicode() helper, and closes several gaps where
NFD-normalized filenames could still slip through unnormalized:
- Document.get_public_filename() now normalizes, fixing exported filenames
built from an NFD title/correspondent name (the default, non-format export
path was not covered by the earlier fix).
- DocumentViewSet.update_version() now normalizes the uploaded filename,
matching PostDocumentView's existing behavior.
- ConsumerPlugin normalizes self.filename once at consumption time, covering
the title fallback and Document.original_filename for every document
source (consume folder, mail, API, barcode splits).
- Workflow trigger and mail rule filename/path matching (documents/matching.py,
paperless_mail/mail.py) now normalize the document/attachment side before
comparing, so an NFD filename matches an NFC-typed filter pattern instead of
silently failing to match.
- WorkflowTriggerSerializer and MailRuleSerializer normalize filter_filename/
filter_path and the attachment include/exclude patterns once at write time,
so the read side isn't re-normalizing an already-canonical value on every
match.