Преобразование из Unicode (или любой другой кодировки символов) в пользовательскую кодировку и наоборот - возможно ли это? - PullRequest
0 голосов
/ 09 мая 2018

Поскольку Unicode имеет сложную кодировку для каждого символа, возможно ли каким-либо образом создать пользовательскую кодировку, то есть преобразовать ее в кодировку Unicode и наоборот, чтобы пользователь мог легко вводить символы Unicode в Интернете? Я постараюсь объяснить, в чем моя идея.

Например, я сделаю веб-страницу, которая будет иметь текстовое поле и выходной div. Пользователь будет вводить пользовательский код. Javascript или PHP будет принимать входное значение поля, сравнивать его с «книгой кодирования», преобразовывать в соответствующий предопределенный символ Unicode и отображать в выходном div. Если это возможно, куда поместить файл «книги кодирования», чтобы код мог сравнивать с ним входные значения и находить соответствующие значения Unicode?

Например: Aa568 (пользовательский ввод, пользовательский код) ---> U + 00E7 (преобразованное значение) ---> ç (отображаемое значение).

Мне нужно это для одного проекта, который я делаю, поэтому я хочу знать, возможно ли каким-либо образом добиться этого.

UPDATE:

Мой вопрос связан с моими сообщениями о египетском иероглифическом писателе. Я нашел иероглифический шрифт, который содержит 7950 иероглифических символов, поэтому я хотел бы сделать этот шрифт типизируемым, назначая предварительно определенные коды (обычное египтологическое кодирование) каждому из этих символов в шрифте, чтобы пользователи могли вводить этот обычный код и получать конкретный символ из шрифта.

1 Ответ

0 голосов
/ 09 мая 2018

Сначала немного информации, чтобы прояснить ситуацию, возможно, это вам уже поможет.

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.

...