Two visually identical strings fail an equality check

Back to list2026-07-19
You

Two visually identical strings fail an equality check.

ChatGPT

Almost certainly composed versus decomposed forms: "é" as one code point or as "e" plus a combining accent. Normalise both sides with NFC before comparing, and store normalised so the problem does not come back through a different door.

You

Alphabetical sort puts accented names at the end.

ChatGPT

Byte order is not alphabetical order. Use a locale-aware collator, and pick the locale deliberately, because Swedish and German disagree about where "ä" belongs and both are right for their readers.

You

len() disagrees with what users see as one character.

ChatGPT

Because a user-perceived character can be several code points: an emoji with a skin tone modifier is one grapheme and up to four code points. Count grapheme clusters when the number is shown to a person, code points when it is a storage limit.