使用阿拉伯语script unicode隐藏秘密文本

时间:2019-02-12 21:48:01

标签: java unicode arabic

我在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 لـ)。...等

在两种情况下我遇到的问题是字符显示为未连接的字符 如果我们有中间上下文char和先前char是第一种情况是通用的。例如:this word(حسن)(0646-0633-062D) 隐藏后将是(FEE6-FEB4-062D)(حﺴﻦ) 我该如何解决这个问题。

如果我们有结束的上下文字符,并且以前的字符是通用的。 前隐藏该问题后,将以一般形式(عاد)(0639-0627-062)出现此单词,因为字符将显示为未连接(عﺎﺩ)(FEA9-FE8E-0639)  我该如何解决这个问题。

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

您可以在此链接中找到代码

1 个答案:

答案 0 :(得分:0)

上下文形式的阿拉伯字母没有任何共同的行为。这意味着它们不会改变周围其他字母的形状。

如果要使通用字母连接到上下文形式,则需要插入不可见字符ZERO WIDTH JOINER(U + 200D)。此字符将使一般形式与之相连,因此看起来它们实际上与上下文形式有关。

使用示例:

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

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

关于如何执行此操作:原则上,您可以简单地在每种“初始”上下文形式之后,每种“中间”上下文形式之前和之后以及每种“最终”上下文形式之前插入一个零宽度连接符。这将自动确保正确的整形。但是,此解决方案还会插入很多不必要的零宽度连接符,但这并不是一个大问题,因为它们不会在视觉上引起任何问题。

如果仍然要避免这些不必要的零宽度连接符,则需要编写一种更复杂的算法,该算法考虑所有字母的连接行为。例如,如果单词中的下一个字母是能够连接到右侧的通用形式,则仅在“初始”上下文形式之后插入零宽度连接符。 Unicode标准具有一个称为Joining_Type的字符属性,可将所有字母的这种行为编码。如果您想使模糊的文本尽可能短,则可能需要调查一下,但是我在上一段中解释的简单解决方案对您来说就足够了。