Стандарт UNICODE в разделе 3.9 гласит:
Каждая форма кодирования отображает кодовые точки Unicode U + 0000..U + D7FF и U + E000..U + 10FFFF в уникальные последовательности кодовых единиц.
Следовательно, количество кодовых точек («символов»), которые могут быть представлены в UTF-16, равно
0xD7FF + 1 + (0x10FFFF - 0xE000) + 1 = 1 112 064
Стандарт UNICODE обычно 32-битный. Тем не менее, определенные кодировки резервируют меньшее количество битов для представления наиболее распространенных символов, накладывают определенные ограничения на реальное количество символов, которые они могут юридически представлять. Для учета более длинных битовых последовательностей, которые, в свою очередь, позволяют описывать кодовые точки длиннее 8 (UTF-8) или 16 (UTF-16) битов, определяются специальные суррогатные кодовые точки.
Кроме того, возможность представлять данную кодовую точку в данной кодировке не означает, что она действительна - она должна быть сначала выделена и описана стандартом UNICODE. Поэтому не существует математической формулы, которая бы вырабатывала количество символов, которое можно представить, а число 1 112 064 не обязательно означает, что существует 1M допустимых символов.
Подробнее об этом см. раздел 3.9 стандарта UNICODE.