Start with a preserved source
This workflow is for text that will be reused elsewhere, not for changing a source of record in place. Save the original and a small sample that exposes the problem: mojibake, fullwidth punctuation, mixed date patterns, currency symbols, or MIME escape sequences. Decide the receiving system's charset, width convention, locale, and output format before touching the text.
Fix the representation layers first
If the input is email MIME transfer text, run quoted-printable-decoder before interpreting its characters. If the bytes are in the wrong file charset, use file-encoding-converter next and keep the intermediate output. This order prevents later steps from treating escape sequences or mojibake as literal content.
Choose exactly one width direction with fullwidth-to-halfwidth or halfwidth-to-fullwidth. The right choice comes from the receiving field: narrow ASCII-oriented identifiers need the first path, while a CJK presentation rule may need the second. Compare punctuation and digits, not only letters.
Normalize meaning-bearing text selectively
Once the representation is stable, use text-date-format-unifier for dates with a declared target pattern and text-currency-normalizer for money expressions with a known code and policy. Record what changed and retain the original value; formatting or conversion of a currency string is not a financial approval.
Finish with the branch that matches the consumer. Use advanced-case-converter for naming conventions, number-to-words for prose that needs spelled-out numbers, and word-separator for line-oriented word lists. If the final destination is MIME, apply quoted-printable-encoder only after all text edits. Validate representative characters, dates, amounts, line breaks, and the downstream format before delivery.