Вы, кажется, перепутали UTF-8 и UTF-16 (или, возможно, UCS-2). Символы в кодировке UTF-8 имеют переменную длину от 1 до 4 байтов. В противоположность этому, вы, кажется, хотите записать UTF-16 или UCS-2 в свои файлы (я предполагаю, что это из \uxxxx
ссылок на символы в выходной строке вашего файла).
Для обзора этих наборов символов посмотрите статью Википедии о UTF-8 и просмотрите оттуда.
Вот некоторые из самых основных (сильно упрощенных) основ:
UCS-2 сохраняет все символы как ровно 16 бит. Поэтому он не может кодировать все символы Юникода, только так называемую «Базовую многоязычную плоскость».
UTF-16 хранит наиболее часто используемые символы в 16 битах, но некоторые символы должны быть закодированы в 32 битах.
UTF-8 кодирует символы переменной длины от 1 до 4 байтов. Только символы из оригинальной 7-битной кодировки ASCII кодируются как 1 байт.