UCharPointer points to an array of uint16_t which is generally not enough for a single UTF-8 character since the code point range is [0..0x10FFFF].
After unpack U* and write, the higher bits just vanished.
unpack S* is also not helpful at all. The array can't be packed again.