Сначала немного информации, чтобы прояснить ситуацию, возможно, это вам уже поможет.
Unicode
Юникод состоит из разных кодовых точек, где каждая кодовая точка представляет отдельный символ. Как вы правильно указали в своем примере, кодовая точка U+00E7
представляет символ ç
. Согласно Википедии, есть 1.114.112 кодовых точек, разделенных на 17 плоскостей, состоящих из 65536 символов ( один шрифт может хранить только 65 535 различных символов, поэтому вы знаете, как число внутри плоскостей останавливается ). Эти кодовые точки являются только теоретической концепцией, символы не хранятся в памяти таким образом!
Кодирование
Теперь Unicode НЕ кодировка В том смысле, как символ закодирован на вашем компьютере. Обычно вышеупомянутая кодовая точка кодируется в разных представлениях. Двумя наиболее широко используемыми являются UTF-8 и UTF-16. Первый, UTF-8, использует один байт для хранения символов в памяти. Символы ASCII хранятся в одном байте, все выше в многобайтовом формате, например, ç
становится C3 A7
в вашей памяти. Когда вы используете UTF-16, для кодирования будут использоваться два байта, поэтому ç
становится 00e7
в памяти. Таким образом, ваш компьютер всегда будет видеть символы, а не фактические кодовые точки (если не существует кодировки, о которой я не знаю)
Эти кодировки можно затем преобразовать в кодовую точку, чтобы найти правильный символ Unicode.
Как видите, что-то похожее на ваш проект существует и используется во всем мире, так что это определенно возможно. Вам следует задать свой вопрос, если вы действительно хотите использовать свою пользовательскую кодировку или одну из широко используемых стандартных кодировок (их больше, чем UTF-8 и UTF-16). Когда вы придумываете функцию, которая преобразует вашу пользовательскую кодировку в кодовую точку Unicode, используя «кодовую книгу» или, может быть, правило, которое вы придумали, ничто не мешает вам. Как вы можете достичь этого, здесь объясняется в некоторой степени: https://linux.die.net/man/7/utf8.