Consider the following diagram:
[user-perceived characters] [grapheme clusters] |
^ ^ |
| | |
v v |
[bytes] [codepoints] [glyphs]
Choice of encoding only affects the conversion from bytes to codepoints, which is pretty straight-forward: The subtleties lie elsewhere...