Word counts that match: Unicode pitfalls
Word counts disagree because 'word' is ambiguous: hyphenations, apostrophes, CJK scripts with no spaces, emojis with modifiers (one grapheme, many code points), and hidden formatting all count differently per tool.
Unicode-correct counting splits on grapheme clusters, not code units: 'café' is 4 characters whether é is composed or decomposed, and flags count as one visible unit.
Mistakes: trusting one tool for billing (agree the method first), counting code with comments as prose, and pasting from Word with tracked changes (deleted text may still count).
Example: 'Hello 👋🏽 world' = 2 words, 13 graphemes, but 17 UTF-16 code units. Invoice by the method, not the number.
Try: Word Counter · Character Counter
Regex in 15 minutes for writers
Regex in 15 minutes: literal text matches itself; . * + ? shape quantity; \d \w \s are digit/word/space; [abc] is a set; ^ $ anchor ends; ( ) capture for reuse as $1. That covers 90% of real jobs.
Writers use it to normalize manuscripts: double spaces → one, straight quotes → curly, 'Chapter (\d+)' → numbered headings, trailing whitespace → gone.
Mistakes: greedy .* eating across lines (use .*? or [^\n]*), forgetting to escape . ( in literal searches, and find-replacing without a backup or preview of all matches.
Example: find ' (\w+)' with leading double-space, replace '$1' — collapses accidental doubles across a 90,000-word draft in one pass.
Try: Regex Tester Lite · Find & Replace
CSV that survives Excel
CSV that survives Excel follows RFC 4180: UTF-8 with BOM for Excel, CRLF line endings, quotes around any field containing comma/quote/newline, and doubled quotes ('say ''hi''') inside quoted fields.
Open in Excel via Data → From Text/CSV (not double-click) so you control encoding and delimiters — semicolons for locales where comma is the decimal separator.
Mistakes: leading zeros eaten (007 → 7 — prefix with apostrophe or import as text), dates reinterpreted (03/04 flips month/day by locale), and saving back with the wrong delimiter.
Example: '"García, Ana",007,"03/04/2026"' imports as three intact text fields. Plain 007,03/04/2026 arrives mangled.
Try: CSV ⇄ JSON · JSON Formatter / Validator