Использование арабского scricp unicode для сокрытия секретного текста - PullRequest
0 голосов
/ 13 февраля 2019

Я использую арабский скрипт в Unicode (https://en.wikipedia.org/wiki/Arabic_script_in_Unicode) символы написаны в общем виде и в контекстной форме (которые содержат Unicode для символов в начале, в середине, изолированном и конце). Я пытаюсь объединить символы в целомформа с контекстной формой для сокрытия секретного текста

, например, если у нас есть сопроводительный текст это слово (العربيه), которое написано в общем виде (0647-064A-0628-0631-0639-0644-0627). Иу нас есть секретный бит (10011), если секретный бит равен 1, тогда мы изменим код с общего на контекстный в зависимости от его положения в слове, если секретный бит равен 0, тогда ничего не изменится

В нашем бывшемпервый секретный бит справа равен 1, тогда мы изменим код первого символа (ا --0627) на контекстный Unicode в зависимости от его положения в этом слове (العربيه). Символ (0627-ا) записывается как изолированный (FE8D) второй секретный бит равен 1, тогда мы изменим код второго символа (0644-) на начальную форму (FEDF) ... и т. д.

проблема, с которой я столкнулся в двух случаях, когда символы отображаются как несвязанные символы. Первый случай, если у нас средний контекстный символ, а предыдущий символ является общим. Например: это слово (حسن) (0646-0633-062D) После скрытиябудет (FEE6-FEB4-062D) (حﺴﻦ), как я могу решить эту проблему ..

И если у нас есть конечный контекстный символ и предыдущий символ является общим.для бывших;это слово в общем виде (عاد) (0639-0627-062) после сокрытия проблемы появится, потому что символ будет выглядеть как не связанный (عﺎﺩ) (FEA9-FE8E-0639) Как я могу решить эту проблему .. ??

https://drive.google.com/open?id=1pyQt0BaW6ETAGBQOe1HS6Z0xBAGHouvP

код можно найти по этой ссылке

1 Ответ

0 голосов
/ 14 февраля 2019

Контекстные формы арабских букв не имеют никакого присоединяющегося поведения.Это означает, что они не изменят форму других букв, окружающих их.

Если вы хотите, чтобы общие буквы соединялись с контекстными формами, вам нужно вставить невидимый символ ZERO WIDTH JOINER (U + 200D),Этот символ заставит общие формы соединяться с ним, поэтому будет выглядеть, как будто они действительно соединяются с контекстными формами.

Чтобы использовать ваши примеры:

  • 062D FEB4 FEE6: حﺴﻦ
  • 062D 200D FEB4 FEE6: ح‍ﺴﻦ

  • 0639 FE8E FEA9: عﺎﺩ
  • 0639 200D FE8E FEA9: ع‍ﺎﺩ

Относительно того, как вы бы это реализовали: в принципе, вы можете просто вставить Zero Width Joiner после каждой «начальной» контекстной формы, до и после каждой «медиальной» контекстной формыи перед каждой «окончательной» контекстной формой.Это автоматически обеспечит правильное формирование.Тем не менее, это решение также вставит много ненужных соединителей с нулевой шириной, но это не является большой проблемой, поскольку они не вызывают каких-либо проблем визуально.

Если вы все же хотите избежать этих ненужных соединителей с нулевой ширинойВам нужно написать более сложный алгоритм, который учитывает поведение объединения всех букв.Например, вы можете вставить Zero Width Joiner только после «начальной» контекстной формы, если следующая буква в слове - это общая форма, которая может соединяться справа.Стандарт Unicode имеет символьное свойство с именем Joining_Type, которое кодирует это поведение для всех букв.Возможно, вы захотите разобраться в этом, если вы хотите, чтобы скрытый текст был как можно более коротким, но простого решения, которое я объяснил в предыдущем абзаце, должно быть достаточно для вас.

...