UTF-16 - это кодированное кодирование, поэтому, если вы используете UTF-16, то вы делаете то, что он говорит, и не придумывайте никаких «трюков».
Я бы не говорил о «двух байтах», как вы это делаете. Это деталь. Ключевой частью UTF-16 является то, что вы кодируете кодовые точки в виде последовательности из 16-разрядных блоков кода, а пары суррогатов используются для кодирования кодовых точек больше 0xFFFF. Тот факт, что один блок кода состоит из двух 8-битных байтов, является вторым уровнем детализации, который применяется ко многим системам (но существуют системы с большими размерами байтов, где это не имеет значения), и в этом случае вы можете различать большие - и мало-endian представления.
Но, глядя в другую сторону, нет абсолютно никаких причин, почему вы должны использовать использовать UTF-16 специально. В конечном итоге текст Unicode представляет собой просто последовательность чисел (значение до 2), и вам решать, как их представлять и сериализовать.
Я бы с радостью отметил, что UTF-16 - это историческая авария, которую мы, вероятно, не сделали бы, если бы нам пришлось переделать все сейчас: это кодировка переменной длины, как UTF-8, поэтому вы получаете нет произвольного доступа, в отличие от UTF-32, но он также многословен. В отличие от UTF-8 он страдает от проблем с контентом. Хуже всего то, что он смешивает части стандарта Unicode с внутренним представлением, используя фактические значения кодовой точки для суррогатных пар.
Единственная причина, по-моему, в том, что UTF-16 существует потому, что в какой-то ранний момент люди полагали, что 16 бит будет достаточным для всего человечества навсегда, и поэтому UTF-16 будет рассматриваться как окончательное решение (например, UTF-32 сегодня). Когда это оказалось не так, суррогаты и более широкие диапазоны были привязаны к UTF-16. Сегодня вы должны в основном использовать UTF-8 для сериализации извне или UTF-32 для эффективного доступа внутри. (Возможно, существуют дополнительные предпосылки для предпочтения, возможно, UCS-2 для чистого азиатского текста.)